1
+ #![ cfg_attr( not( test) , no_std) ]
1
2
#![ cfg_attr( docsrs, feature( doc_cfg) ) ]
2
3
//! `julian` is a Rust library for converting between [Julian day numbers][jdn]
3
4
//! and dates in the [Gregorian calendar][] (either proleptic or with the
@@ -172,10 +173,15 @@ pub mod iter;
172
173
pub mod ncal;
173
174
use crate :: errors:: * ;
174
175
use crate :: iter:: * ;
175
- use std:: cmp:: Ordering ;
176
- use std:: fmt;
177
- use std:: ops:: RangeInclusive ;
178
- use std:: str:: FromStr ;
176
+ use core:: cmp:: Ordering ;
177
+ use core:: fmt;
178
+ use core:: ops:: RangeInclusive ;
179
+ use core:: str:: FromStr ;
180
+
181
+ #[ cfg( feature = "std" ) ]
182
+ extern crate std;
183
+
184
+ #[ cfg( feature = "std" ) ]
179
185
use std:: time:: { SystemTime , UNIX_EPOCH } ;
180
186
181
187
/// Type used for Julian day numbers in this crate
@@ -396,6 +402,8 @@ impl Calendar {
396
402
/// converting the time. This can only happen if the system time in UTC is
397
403
/// before -5884323-05-15 (-5884202-03-16 O.S.) or after 5874898-06-03
398
404
/// (5874777-10-17 O.S.).
405
+ #[ cfg( feature = "std" ) ]
406
+ #[ cfg_attr( docsrs, doc( cfg( feature = "std" ) ) ) ]
399
407
pub fn now ( & self ) -> Result < ( Date , u32 ) , ArithmeticError > {
400
408
self . at_system_time ( SystemTime :: now ( ) )
401
409
}
@@ -409,6 +417,8 @@ impl Calendar {
409
417
/// converting the time. This can only happen if the system time in UTC is
410
418
/// before -5884323-05-15 (-5884202-03-16 O.S.) or after 5874898-06-03
411
419
/// (5874777-10-17 O.S.).
420
+ #[ cfg( feature = "std" ) ]
421
+ #[ cfg_attr( docsrs, doc( cfg( feature = "std" ) ) ) ]
412
422
pub fn at_system_time ( & self , t : SystemTime ) -> Result < ( Date , u32 ) , ArithmeticError > {
413
423
let ( jdn, secs) = system2jdn ( t) ?;
414
424
Ok ( ( self . at_jdn ( jdn) , secs) )
@@ -2134,21 +2144,32 @@ impl FromStr for Month {
2134
2144
/// Parses a month from either its English name or just the first three
2135
2145
/// letters of the name. Input is treated case-insensitively.
2136
2146
fn from_str ( s : & str ) -> Result < Month , ParseMonthError > {
2137
- use Month :: * ;
2138
- match s. to_ascii_lowercase ( ) . as_str ( ) {
2139
- "january" | "jan" => Ok ( January ) ,
2140
- "february" | "feb" => Ok ( February ) ,
2141
- "march" | "mar" => Ok ( March ) ,
2142
- "april" | "apr" => Ok ( April ) ,
2143
- "may" => Ok ( May ) ,
2144
- "june" | "jun" => Ok ( June ) ,
2145
- "july" | "jul" => Ok ( July ) ,
2146
- "august" | "aug" => Ok ( August ) ,
2147
- "september" | "sep" => Ok ( September ) ,
2148
- "october" | "oct" => Ok ( October ) ,
2149
- "november" | "nov" => Ok ( November ) ,
2150
- "december" | "dec" => Ok ( December ) ,
2151
- _ => Err ( ParseMonthError ) ,
2147
+ if s. eq_ignore_ascii_case ( "january" ) || s. eq_ignore_ascii_case ( "jan" ) {
2148
+ Ok ( Month :: January )
2149
+ } else if s. eq_ignore_ascii_case ( "february" ) || s. eq_ignore_ascii_case ( "feb" ) {
2150
+ Ok ( Month :: February )
2151
+ } else if s. eq_ignore_ascii_case ( "march" ) || s. eq_ignore_ascii_case ( "mar" ) {
2152
+ Ok ( Month :: March )
2153
+ } else if s. eq_ignore_ascii_case ( "april" ) || s. eq_ignore_ascii_case ( "apr" ) {
2154
+ Ok ( Month :: April )
2155
+ } else if s. eq_ignore_ascii_case ( "may" ) {
2156
+ Ok ( Month :: May )
2157
+ } else if s. eq_ignore_ascii_case ( "june" ) || s. eq_ignore_ascii_case ( "jun" ) {
2158
+ Ok ( Month :: June )
2159
+ } else if s. eq_ignore_ascii_case ( "july" ) || s. eq_ignore_ascii_case ( "jul" ) {
2160
+ Ok ( Month :: July )
2161
+ } else if s. eq_ignore_ascii_case ( "august" ) || s. eq_ignore_ascii_case ( "aug" ) {
2162
+ Ok ( Month :: August )
2163
+ } else if s. eq_ignore_ascii_case ( "september" ) || s. eq_ignore_ascii_case ( "sep" ) {
2164
+ Ok ( Month :: September )
2165
+ } else if s. eq_ignore_ascii_case ( "october" ) || s. eq_ignore_ascii_case ( "oct" ) {
2166
+ Ok ( Month :: October )
2167
+ } else if s. eq_ignore_ascii_case ( "november" ) || s. eq_ignore_ascii_case ( "nov" ) {
2168
+ Ok ( Month :: November )
2169
+ } else if s. eq_ignore_ascii_case ( "december" ) || s. eq_ignore_ascii_case ( "dec" ) {
2170
+ Ok ( Month :: December )
2171
+ } else {
2172
+ Err ( ParseMonthError )
2152
2173
}
2153
2174
}
2154
2175
}
@@ -2366,16 +2387,22 @@ impl FromStr for Weekday {
2366
2387
/// Parses a weekday from either its English name or just the first three
2367
2388
/// letters of the name. Input is treated case-insensitively.
2368
2389
fn from_str ( s : & str ) -> Result < Weekday , ParseWeekdayError > {
2369
- use Weekday :: * ;
2370
- match s. to_ascii_lowercase ( ) . as_str ( ) {
2371
- "sunday" | "sun" => Ok ( Sunday ) ,
2372
- "monday" | "mon" => Ok ( Monday ) ,
2373
- "tuesday" | "tue" => Ok ( Tuesday ) ,
2374
- "wednesday" | "wed" => Ok ( Wednesday ) ,
2375
- "thursday" | "thu" => Ok ( Thursday ) ,
2376
- "friday" | "fri" => Ok ( Friday ) ,
2377
- "saturday" | "sat" => Ok ( Saturday ) ,
2378
- _ => Err ( ParseWeekdayError ) ,
2390
+ if s. eq_ignore_ascii_case ( "sunday" ) || s. eq_ignore_ascii_case ( "sun" ) {
2391
+ Ok ( Weekday :: Sunday )
2392
+ } else if s. eq_ignore_ascii_case ( "monday" ) || s. eq_ignore_ascii_case ( "mon" ) {
2393
+ Ok ( Weekday :: Monday )
2394
+ } else if s. eq_ignore_ascii_case ( "tuesday" ) || s. eq_ignore_ascii_case ( "tue" ) {
2395
+ Ok ( Weekday :: Tuesday )
2396
+ } else if s. eq_ignore_ascii_case ( "wednesday" ) || s. eq_ignore_ascii_case ( "wed" ) {
2397
+ Ok ( Weekday :: Wednesday )
2398
+ } else if s. eq_ignore_ascii_case ( "thursday" ) || s. eq_ignore_ascii_case ( "thu" ) {
2399
+ Ok ( Weekday :: Thursday )
2400
+ } else if s. eq_ignore_ascii_case ( "friday" ) || s. eq_ignore_ascii_case ( "fri" ) {
2401
+ Ok ( Weekday :: Friday )
2402
+ } else if s. eq_ignore_ascii_case ( "saturday" ) || s. eq_ignore_ascii_case ( "sat" ) {
2403
+ Ok ( Weekday :: Saturday )
2404
+ } else {
2405
+ Err ( ParseWeekdayError )
2379
2406
}
2380
2407
}
2381
2408
}
@@ -2446,6 +2473,8 @@ impl From<Weekday> for chrono::Weekday {
2446
2473
/// conversion. This can only happen if the system time in UTC is before
2447
2474
/// -5884323-05-15 (-5884202-03-16 O.S.) or after 5874898-06-03 (5874777-10-17
2448
2475
/// O.S.).
2476
+ #[ cfg( feature = "std" ) ]
2477
+ #[ cfg_attr( docsrs, doc( cfg( feature = "std" ) ) ) ]
2449
2478
pub fn system2jdn ( t : SystemTime ) -> Result < ( Jdnum , u32 ) , ArithmeticError > {
2450
2479
let ts = match t. duration_since ( UNIX_EPOCH ) {
2451
2480
Ok ( d) => i64:: try_from ( d. as_secs ( ) ) ,
0 commit comments