pub struct DecisionRequestId(pub u64);Tuple Fields§
§0: u64Implementations§
Source§impl DecisionRequestId
impl DecisionRequestId
Sourcepub const fn new(value: u64) -> DecisionRequestId
pub const fn new(value: u64) -> DecisionRequestId
Examples found in repository?
examples/decision_ticket.rs (line 56)
41fn open_aid_request(canwu: &mut Canwu, ids: DemoIds) -> Result<(), Box<dyn std::error::Error>> {
42 let now = canwu.time();
43 let controller = DecisionControllerBinding::new(
44 "warlord-b-ai",
45 DecisionPolicyIdentity::new(DecisionPolicyKind::Utility, "aid-utility", "1"),
46 DecisionAuthority::Actor {
47 actor: ids.commander,
48 },
49 )
50 .with_command_subject(EntityRef::Army(ids.army));
51
52 canwu.enqueue_decision(
53 now,
54 0,
55 DecisionIngressRequest::new(
56 DecisionRequestId::new(1),
57 canwu.revision(),
58 DecisionMutation::RegisterController { controller },
59 ),
60 )?;
61 canwu.enqueue_decision(
62 now,
63 0,
64 DecisionIngressRequest::new(
65 DecisionRequestId::new(2),
66 canwu.revision(),
67 DecisionMutation::Open {
68 ticket: DecisionTicketDraft {
69 id: DecisionTicketId::new(1),
70 definition: "beiyang.request-military-aid".to_owned(),
71 decision_maker: EntityRef::Person(ids.commander),
72 assigned_controller: "warlord-b-ai".to_owned(),
73 summary: "Neighboring warlord requests immediate military aid".to_owned(),
74 context: DecisionContext::new(
75 "beiyang.aid-request.v1",
76 json!({
77 "requester": "warlord-a",
78 "battle": "ongoing-front",
79 "common_enemy": true
80 }),
81 ),
82 options: vec![DecisionOption {
83 action: DecisionAction::None,
84 utility_inputs: BTreeMap::from([
85 ("home_defense".to_owned(), 80),
86 ("alliance".to_owned(), -40),
87 ]),
88 ..DecisionOption::new("decline", "Decline aid")
89 }],
90 deadline: Some(now + SimDuration::days(2)),
91 },
92 },
93 ),
94 )?;
95 canwu.step_canonical()?.expect("decision intake boundary");
96 Ok(())
97}
98
99fn refresh_aid_options(canwu: &mut Canwu, ids: DemoIds) -> Result<(), Box<dyn std::error::Error>> {
100 canwu.enqueue_decision(
101 canwu.time(),
102 0,
103 DecisionIngressRequest::new(
104 DecisionRequestId::new(3),
105 canwu.revision(),
106 DecisionMutation::ReplaceOptions {
107 ticket_id: DecisionTicketId::new(1),
108 expected_version: 1,
109 context: DecisionContext::new(
110 "beiyang.aid-request.v1",
111 json!({
112 "requester": "warlord-a",
113 "battle": "ongoing-front",
114 "common_enemy": true,
115 "route_confirmed": true
116 }),
117 ),
118 options: vec![
119 DecisionOption {
120 action: DecisionAction::None,
121 utility_inputs: BTreeMap::from([
122 ("home_defense".to_owned(), 80),
123 ("alliance".to_owned(), -40),
124 ]),
125 ..DecisionOption::new("decline", "Decline aid")
126 },
127 DecisionOption {
128 action: DecisionAction::Command {
129 command: serde_json::to_value(Command::OrderMovement {
130 subject: EntityRef::Army(ids.army),
131 destination: ids.eastern_territory,
132 cargo: Vec::new(),
133 })?,
134 },
135 utility_inputs: BTreeMap::from([
136 ("home_defense".to_owned(), -20),
137 ("alliance".to_owned(), 90),
138 ]),
139 ..DecisionOption::new("send-aid", "Send the neighboring army")
140 },
141 ],
142 },
143 ),
144 )?;
145 canwu
146 .step_canonical()?
147 .expect("dynamic option refresh boundary");
148 Ok(())
149}
150
151fn resolve_aid_request(canwu: &mut Canwu) -> Result<(), Box<dyn std::error::Error>> {
152 let policy = WeightedUtilityPolicy::new(
153 "aid-utility",
154 "1",
155 UtilityProfile {
156 weights: BTreeMap::from([("alliance".to_owned(), 3), ("home_defense".to_owned(), 1)]),
157 },
158 );
159 let evaluation = canwu.drive_decision(
160 canwu.time(),
161 0,
162 DecisionRequestId::new(4),
163 Some(CommandRequestId::new(1)),
164 DecisionTicketId::new(1),
165 &policy,
166 )?;
167 assert!(matches!(evaluation, DecisionEvaluation::Prepared(_)));
168 canwu
169 .step_canonical()?
170 .expect("decision resolution boundary");
171 Ok(())
172}pub const fn get(self) -> u64
Trait Implementations§
Source§impl Clone for DecisionRequestId
impl Clone for DecisionRequestId
Source§fn clone(&self) -> DecisionRequestId
fn clone(&self) -> DecisionRequestId
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 DecisionRequestId
Source§impl Debug for DecisionRequestId
impl Debug for DecisionRequestId
Source§impl Default for DecisionRequestId
impl Default for DecisionRequestId
Source§fn default() -> DecisionRequestId
fn default() -> DecisionRequestId
Returns the “default value” for a type. Read more
Source§impl<'de> Deserialize<'de> for DecisionRequestId
impl<'de> Deserialize<'de> for DecisionRequestId
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<DecisionRequestId, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<DecisionRequestId, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Display for DecisionRequestId
impl Display for DecisionRequestId
impl Eq for DecisionRequestId
Source§impl Hash for DecisionRequestId
impl Hash for DecisionRequestId
Source§impl Ord for DecisionRequestId
impl Ord for DecisionRequestId
Source§fn cmp(&self, other: &DecisionRequestId) -> Ordering
fn cmp(&self, other: &DecisionRequestId) -> 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
Source§impl PartialEq for DecisionRequestId
impl PartialEq for DecisionRequestId
Source§impl PartialOrd for DecisionRequestId
impl PartialOrd for DecisionRequestId
Source§impl Serialize for DecisionRequestId
impl Serialize for DecisionRequestId
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 DecisionRequestId
Auto Trait Implementations§
impl Freeze for DecisionRequestId
impl RefUnwindSafe for DecisionRequestId
impl Send for DecisionRequestId
impl Sync for DecisionRequestId
impl Unpin for DecisionRequestId
impl UnsafeUnpin for DecisionRequestId
impl UnwindSafe for DecisionRequestId
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