pub struct DecisionOption {
pub id: String,
pub label: String,
pub description: String,
pub action: DecisionAction,
pub utility_inputs: BTreeMap<String, i64>,
pub blockers: Vec<String>,
pub metadata: Value,
}Fields§
§id: String§label: String§description: String§action: DecisionAction§utility_inputs: BTreeMap<String, i64>§blockers: Vec<String>§metadata: ValueImplementations§
Source§impl DecisionOption
impl DecisionOption
Sourcepub fn new(id: impl Into<String>, label: impl Into<String>) -> DecisionOption
pub fn new(id: impl Into<String>, label: impl Into<String>) -> DecisionOption
Examples found in repository?
examples/decision_ticket.rs (line 88)
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}pub fn with_command(self, command: Value) -> DecisionOption
pub fn is_available(&self) -> bool
Trait Implementations§
Source§impl Clone for DecisionOption
impl Clone for DecisionOption
Source§fn clone(&self) -> DecisionOption
fn clone(&self) -> DecisionOption
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 moreSource§impl Debug for DecisionOption
impl Debug for DecisionOption
Source§impl<'de> Deserialize<'de> for DecisionOption
impl<'de> Deserialize<'de> for DecisionOption
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<DecisionOption, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<DecisionOption, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl Eq for DecisionOption
Source§impl PartialEq for DecisionOption
impl PartialEq for DecisionOption
Source§impl Serialize for DecisionOption
impl Serialize for DecisionOption
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 DecisionOption
Auto Trait Implementations§
impl Freeze for DecisionOption
impl RefUnwindSafe for DecisionOption
impl Send for DecisionOption
impl Sync for DecisionOption
impl Unpin for DecisionOption
impl UnsafeUnpin for DecisionOption
impl UnwindSafe for DecisionOption
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