chinese_rand/gregorian/mod.rs
1//! Module supporting the random generation of date/time objects
2//! according to the Gregorian calendar.
3//!
4//! **Required feature**: `gregorian`.
5mod date;
6mod time;
7
8pub use date::*;
9pub use time::*;
10
11use crate::{ChineseFormatGenerator, RawGenerator};
12
13/// Random generator dedicated to the date/time concepts
14/// in the Gregorian calendar.
15///
16/// It is worth noting that it must be created via the
17/// [ChineseFormatGenerator::gregorian] method;
18/// furthermore, it actually just keeps a reference to
19/// the [RawGenerator] owned by [ChineseFormatGenerator].
20pub struct GregorianGenerator<'a> {
21 raw_generator: &'a dyn RawGenerator,
22}
23
24impl ChineseFormatGenerator {
25 /// Creates a reusable [GregorianGenerator] instance, for generating
26 /// date/time values according to the Gregorian calendar.
27 ///
28 /// ```
29 /// use chinese_rand::{*, gregorian::*};
30 /// use chinese_format::{ChineseFormat, Variant, gregorian::*};
31 ///
32 /// let raw_generator = FastRandGenerator::new();
33 /// let generator = ChineseFormatGenerator::new(raw_generator);
34 /// let gregorian = generator.gregorian();
35 ///
36 /// fastrand::seed(90);
37 /// let date = gregorian.date(DateParams {
38 /// pattern: DatePattern::YearMonthDayWeekDay,
39 /// year_range: Some(2000..=2019),
40 /// formal: true,
41 /// week_format: Some(WeekFormat::Zhou)
42 /// });
43 /// assert_eq!(
44 /// date.to_chinese(Variant::Simplified),
45 /// "二零一三年五月二十三号周一"
46 /// );
47 ///
48 /// fastrand::seed(90);
49 /// let time = gregorian.linear_time(LinearTimeParams {
50 /// day_part: true,
51 /// include_second: true
52 /// });
53 /// assert_eq!(time.to_chinese(Variant::Simplified), "下午四点二十分四十三秒");
54 /// ```
55 ///
56 /// **Required feature**: `gregorian`.
57 pub fn gregorian(&self) -> GregorianGenerator {
58 GregorianGenerator {
59 raw_generator: self.raw_generator.as_ref(),
60 }
61 }
62}