pub struct SimDuration(/* private fields */);Implementations§
Source§impl SimDuration
impl SimDuration
pub const ZERO: SimDuration
Sourcepub const fn minutes(minutes: i64) -> SimDuration
pub const fn minutes(minutes: i64) -> SimDuration
Sourcepub const fn hours(hours: i64) -> SimDuration
pub const fn hours(hours: i64) -> SimDuration
Creates a duration from hours.
§Panics
Panics when the value cannot be represented in simulation minutes. Use
Self::checked_hours for data-dependent input.
pub const fn checked_hours(hours: i64) -> Option<SimDuration>
Sourcepub const fn days(days: i64) -> SimDuration
pub const fn days(days: i64) -> SimDuration
Creates a duration from days.
§Panics
Panics when the value cannot be represented in simulation minutes. Use
Self::checked_days for data-dependent input.
Examples found in repository?
examples/uncertainty_resolution.rs (line 163)
148fn random_branch() -> Result<(), Box<dyn std::error::Error>> {
149 let mut canwu = Canwu::demo(202)?;
150 canwu.register_plugin(&UncertaintyPlugin)?;
151 enqueue_ticket(
152 &mut canwu,
153 RANDOM_TICKET,
154 1,
155 DecisionControllerBinding::new(
156 "law-random-controller",
157 DecisionPolicyIdentity::new(DecisionPolicyKind::Random, "weighted-random", "1"),
158 DecisionAuthority::Actor {
159 actor: Canwu::demo_ids().commander,
160 },
161 ),
162 )?;
163 let selection_at = SimTime::EPOCH + SimDuration::days(1);
164 canwu.schedule_calendar_boundary(selection_at, vec![SystemCadence::Daily])?;
165 canwu.step_canonical()?.expect("random source boundary");
166 canwu
167 .step_canonical()?
168 .expect("generated decision resolution boundary");
169 let trace = canwu
170 .decision_trace(canwu_api::DecisionTraceId::new(1))
171 .expect("random decision trace");
172 println!("random_trace={}", serde_json::to_string(trace)?);
173 Ok(())
174}More examples
examples/decision_ticket.rs (line 78)
29fn open_aid_request(canwu: &mut Canwu, ids: DemoIds) -> Result<(), Box<dyn std::error::Error>> {
30 let now = canwu.time();
31 let controller = DecisionControllerBinding::new(
32 "warlord-b-ai",
33 DecisionPolicyIdentity::new(DecisionPolicyKind::Utility, "aid-utility", "1"),
34 DecisionAuthority::Actor {
35 actor: ids.commander,
36 },
37 )
38 .with_command_subject(EntityRef::Army(ids.army));
39
40 canwu.enqueue_decision(
41 now,
42 0,
43 DecisionIngressRequest::new(
44 DecisionRequestId::new(1),
45 canwu.revision(),
46 DecisionMutation::RegisterController { controller },
47 ),
48 )?;
49 canwu.enqueue_decision(
50 now,
51 0,
52 DecisionIngressRequest::new(
53 DecisionRequestId::new(2),
54 canwu.revision(),
55 DecisionMutation::Open {
56 ticket: DecisionTicketDraft {
57 id: DecisionTicketId::new(1),
58 definition: "beiyang.request-military-aid".to_owned(),
59 decision_maker: EntityRef::Person(ids.commander),
60 assigned_controller: "warlord-b-ai".to_owned(),
61 summary: "Neighboring warlord requests immediate military aid".to_owned(),
62 context: DecisionContext::new(
63 "beiyang.aid-request.v1",
64 json!({
65 "requester": "warlord-a",
66 "battle": "ongoing-front",
67 "common_enemy": true
68 }),
69 ),
70 options: vec![DecisionOption {
71 action: DecisionAction::None,
72 utility_inputs: BTreeMap::from([
73 ("home_defense".to_owned(), 80),
74 ("alliance".to_owned(), -40),
75 ]),
76 ..DecisionOption::new("decline", "Decline aid")
77 }],
78 deadline: Some(now + SimDuration::days(2)),
79 parent_ticket: None,
80 },
81 },
82 ),
83 )?;
84 canwu.step_canonical()?.expect("decision intake boundary");
85 Ok(())
86}pub const fn checked_days(days: i64) -> Option<SimDuration>
Sourcepub const fn as_minutes(self) -> i64
pub const fn as_minutes(self) -> i64
pub const fn is_negative(self) -> bool
pub const fn checked_add(self, other: SimDuration) -> Option<SimDuration>
Trait Implementations§
Source§impl Add for SimDuration
impl Add for SimDuration
Source§type Output = SimDuration
type Output = SimDuration
The resulting type after applying the
+ operator.Source§fn add(self, other: SimDuration) -> <SimDuration as Add>::Output
fn add(self, other: SimDuration) -> <SimDuration as Add>::Output
Performs the
+ operation. Read moreSource§impl Add<SimDuration> for SimTime
impl Add<SimDuration> for SimTime
Source§impl AddAssign<SimDuration> for SimTime
impl AddAssign<SimDuration> for SimTime
Source§fn add_assign(&mut self, duration: SimDuration)
fn add_assign(&mut self, duration: SimDuration)
Performs the
+= operation. Read moreSource§impl Clone for SimDuration
impl Clone for SimDuration
Source§fn clone(&self) -> SimDuration
fn clone(&self) -> SimDuration
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for SimDuration
Source§impl Debug for SimDuration
impl Debug for SimDuration
Source§impl Default for SimDuration
impl Default for SimDuration
Source§fn default() -> SimDuration
fn default() -> SimDuration
Returns the “default value” for a type. Read more
Source§impl<'de> Deserialize<'de> for SimDuration
impl<'de> Deserialize<'de> for SimDuration
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<SimDuration, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<SimDuration, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl Eq for SimDuration
Source§impl Ord for SimDuration
impl Ord for SimDuration
Source§fn cmp(&self, other: &SimDuration) -> Ordering
fn cmp(&self, other: &SimDuration) -> Ordering
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the minimum of two values. Read more
Source§impl PartialEq for SimDuration
impl PartialEq for SimDuration
Source§impl PartialOrd for SimDuration
impl PartialOrd for SimDuration
Source§impl Serialize for SimDuration
impl Serialize for SimDuration
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
impl StructuralPartialEq for SimDuration
Auto Trait Implementations§
impl Freeze for SimDuration
impl RefUnwindSafe for SimDuration
impl Send for SimDuration
impl Sync for SimDuration
impl Unpin for SimDuration
impl UnsafeUnpin for SimDuration
impl UnwindSafe for SimDuration
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more