1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: net.anisota.beta.game.log
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8///Details about item/specimen collection
9#[jacquard_derive::lexicon]
10#[derive(
11 serde::Serialize,
12 serde::Deserialize,
13 Debug,
14 Clone,
15 PartialEq,
16 Eq,
17 jacquard_derive::IntoStatic
18)]
19#[serde(rename_all = "camelCase")]
20pub struct CollectionData<'a> {
21 ///Catch probability for specimens (decimal string between 0.0 and 1.0)
22 #[serde(skip_serializing_if = "std::option::Option::is_none")]
23 #[serde(borrow)]
24 pub catch_probability: std::option::Option<jacquard_common::CowStr<'a>>,
25 ///URI of the created inventory record
26 #[serde(skip_serializing_if = "std::option::Option::is_none")]
27 #[serde(borrow)]
28 pub inventory_record_uri: std::option::Option<jacquard_common::CowStr<'a>>,
29 ///How the item was obtained
30 #[serde(skip_serializing_if = "std::option::Option::is_none")]
31 #[serde(borrow)]
32 pub method: std::option::Option<jacquard_common::CowStr<'a>>,
33 ///URI of the created specimen record
34 #[serde(skip_serializing_if = "std::option::Option::is_none")]
35 #[serde(borrow)]
36 pub specimen_record_uri: std::option::Option<jacquard_common::CowStr<'a>>,
37 ///Whether collection was successful
38 #[serde(skip_serializing_if = "std::option::Option::is_none")]
39 pub success: std::option::Option<bool>,
40 ///Milliseconds between card generation and collection
41 #[serde(skip_serializing_if = "std::option::Option::is_none")]
42 pub time_since_generation: std::option::Option<i64>,
43 ///Milliseconds between card being viewed and collected
44 #[serde(skip_serializing_if = "std::option::Option::is_none")]
45 pub time_since_viewed: std::option::Option<i64>,
46}
47
48///Details about daily rewards claim
49#[jacquard_derive::lexicon]
50#[derive(
51 serde::Serialize,
52 serde::Deserialize,
53 Debug,
54 Clone,
55 PartialEq,
56 Eq,
57 jacquard_derive::IntoStatic
58)]
59#[serde(rename_all = "camelCase")]
60pub struct DailyRewardsData<'a> {
61 #[serde(skip_serializing_if = "std::option::Option::is_none")]
62 #[serde(borrow)]
63 pub reward_items: std::option::Option<
64 Vec<crate::net_anisota::beta::game::log::RewardItem<'a>>,
65 >,
66 ///Number of rewards claimed
67 #[serde(skip_serializing_if = "std::option::Option::is_none")]
68 pub rewards_count: std::option::Option<i64>,
69 ///Current daily reward streak
70 #[serde(skip_serializing_if = "std::option::Option::is_none")]
71 pub streak: std::option::Option<i64>,
72 ///Milliseconds since last claim
73 #[serde(skip_serializing_if = "std::option::Option::is_none")]
74 pub time_since_last_claim: std::option::Option<i64>,
75}
76
77///Context about the feed when event occurred
78#[jacquard_derive::lexicon]
79#[derive(
80 serde::Serialize,
81 serde::Deserialize,
82 Debug,
83 Clone,
84 PartialEq,
85 Eq,
86 jacquard_derive::IntoStatic
87)]
88#[serde(rename_all = "camelCase")]
89pub struct FeedContext<'a> {
90 ///URI of the feed being viewed
91 #[serde(skip_serializing_if = "std::option::Option::is_none")]
92 #[serde(borrow)]
93 pub feed_uri: std::option::Option<jacquard_common::CowStr<'a>>,
94 ///Number of game cards injected
95 #[serde(skip_serializing_if = "std::option::Option::is_none")]
96 pub game_card_count: std::option::Option<i64>,
97 ///Number of posts in the feed
98 #[serde(skip_serializing_if = "std::option::Option::is_none")]
99 pub post_count: std::option::Option<i64>,
100 ///User's scroll position or card index
101 #[serde(skip_serializing_if = "std::option::Option::is_none")]
102 pub scroll_position: std::option::Option<i64>,
103}
104
105///Details about game cards generated or interacted with
106#[jacquard_derive::lexicon]
107#[derive(
108 serde::Serialize,
109 serde::Deserialize,
110 Debug,
111 Clone,
112 PartialEq,
113 Eq,
114 jacquard_derive::IntoStatic
115)]
116#[serde(rename_all = "camelCase")]
117pub struct GameCardData<'a> {
118 ///Type of game card
119 #[serde(skip_serializing_if = "std::option::Option::is_none")]
120 #[serde(borrow)]
121 pub card_type: std::option::Option<jacquard_common::CowStr<'a>>,
122 ///Unique identifier for the game card
123 #[serde(skip_serializing_if = "std::option::Option::is_none")]
124 #[serde(borrow)]
125 pub card_uri: std::option::Option<jacquard_common::CowStr<'a>>,
126 ///Random seed used for generation (for verification)
127 #[serde(skip_serializing_if = "std::option::Option::is_none")]
128 #[serde(borrow)]
129 pub generation_seed: std::option::Option<jacquard_common::CowStr<'a>>,
130 ///Position where card was injected in feed
131 #[serde(skip_serializing_if = "std::option::Option::is_none")]
132 pub injection_position: std::option::Option<i64>,
133 ///ID of the item/specimen
134 #[serde(skip_serializing_if = "std::option::Option::is_none")]
135 #[serde(borrow)]
136 pub item_id: std::option::Option<jacquard_common::CowStr<'a>>,
137 ///Quantity of items
138 #[serde(skip_serializing_if = "std::option::Option::is_none")]
139 pub quantity: std::option::Option<i64>,
140 ///Rarity of the item/specimen
141 #[serde(skip_serializing_if = "std::option::Option::is_none")]
142 #[serde(borrow)]
143 pub rarity: std::option::Option<jacquard_common::CowStr<'a>>,
144}
145
146///Details about item usage
147#[jacquard_derive::lexicon]
148#[derive(
149 serde::Serialize,
150 serde::Deserialize,
151 Debug,
152 Clone,
153 PartialEq,
154 Eq,
155 jacquard_derive::IntoStatic
156)]
157#[serde(rename_all = "camelCase")]
158pub struct ItemUsageData<'a> {
159 ///Effect that was applied
160 #[serde(skip_serializing_if = "std::option::Option::is_none")]
161 #[serde(borrow)]
162 pub effect_applied: std::option::Option<jacquard_common::CowStr<'a>>,
163 ///URI of the modified inventory record
164 #[serde(skip_serializing_if = "std::option::Option::is_none")]
165 #[serde(borrow)]
166 pub inventory_record_uri: std::option::Option<jacquard_common::CowStr<'a>>,
167 ///ID of the item used
168 #[serde(skip_serializing_if = "std::option::Option::is_none")]
169 #[serde(borrow)]
170 pub item_id: std::option::Option<jacquard_common::CowStr<'a>>,
171 ///Quantity of the item used
172 #[serde(skip_serializing_if = "std::option::Option::is_none")]
173 pub quantity_used: std::option::Option<i64>,
174 ///Remaining quantity after use
175 #[serde(skip_serializing_if = "std::option::Option::is_none")]
176 pub remaining_quantity: std::option::Option<i64>,
177}
178
179///A log record for tracking game events and user actions for provenance and anti-bot analysis
180#[jacquard_derive::lexicon]
181#[derive(
182 serde::Serialize,
183 serde::Deserialize,
184 Debug,
185 Clone,
186 PartialEq,
187 Eq,
188 jacquard_derive::IntoStatic
189)]
190#[serde(rename_all = "camelCase")]
191pub struct Log<'a> {
192 #[serde(skip_serializing_if = "std::option::Option::is_none")]
193 #[serde(borrow)]
194 pub collection_data: std::option::Option<
195 crate::net_anisota::beta::game::log::CollectionData<'a>,
196 >,
197 ///When the log record was created
198 #[serde(skip_serializing_if = "std::option::Option::is_none")]
199 pub created_at: std::option::Option<jacquard_common::types::string::Datetime>,
200 #[serde(skip_serializing_if = "std::option::Option::is_none")]
201 #[serde(borrow)]
202 pub daily_rewards_data: std::option::Option<
203 crate::net_anisota::beta::game::log::DailyRewardsData<'a>,
204 >,
205 ///Type of event being logged
206 #[serde(borrow)]
207 pub event_type: jacquard_common::CowStr<'a>,
208 #[serde(skip_serializing_if = "std::option::Option::is_none")]
209 #[serde(borrow)]
210 pub feed_context: std::option::Option<
211 crate::net_anisota::beta::game::log::FeedContext<'a>,
212 >,
213 #[serde(skip_serializing_if = "std::option::Option::is_none")]
214 #[serde(borrow)]
215 pub game_card_data: std::option::Option<
216 crate::net_anisota::beta::game::log::GameCardData<'a>,
217 >,
218 ///Unique ID of the game card this event relates to
219 #[serde(skip_serializing_if = "std::option::Option::is_none")]
220 #[serde(borrow)]
221 pub game_card_id: std::option::Option<jacquard_common::CowStr<'a>>,
222 #[serde(skip_serializing_if = "std::option::Option::is_none")]
223 #[serde(borrow)]
224 pub item_usage_data: std::option::Option<
225 crate::net_anisota::beta::game::log::ItemUsageData<'a>,
226 >,
227 #[serde(skip_serializing_if = "std::option::Option::is_none")]
228 #[serde(borrow)]
229 pub metadata: std::option::Option<crate::net_anisota::beta::game::log::Metadata<'a>>,
230 ///URI of the parent log record that triggered this event
231 #[serde(skip_serializing_if = "std::option::Option::is_none")]
232 #[serde(borrow)]
233 pub parent_log_uri: std::option::Option<jacquard_common::CowStr<'a>>,
234 ///URI of the root log record in this event chain
235 #[serde(skip_serializing_if = "std::option::Option::is_none")]
236 #[serde(borrow)]
237 pub root_log_uri: std::option::Option<jacquard_common::CowStr<'a>>,
238 ///Unique session identifier to group related events
239 #[serde(borrow)]
240 pub session_id: jacquard_common::CowStr<'a>,
241 ///URI of the session record this event belongs to (at://did/collection/rkey)
242 #[serde(skip_serializing_if = "std::option::Option::is_none")]
243 #[serde(borrow)]
244 pub session_uri: std::option::Option<jacquard_common::CowStr<'a>>,
245 ///When the event occurred (ISO 8601)
246 pub timestamp: jacquard_common::types::string::Datetime,
247}
248
249/// Typed wrapper for GetRecord response with this collection's record type.
250#[derive(
251 serde::Serialize,
252 serde::Deserialize,
253 Debug,
254 Clone,
255 PartialEq,
256 Eq,
257 jacquard_derive::IntoStatic
258)]
259#[serde(rename_all = "camelCase")]
260pub struct LogGetRecordOutput<'a> {
261 #[serde(skip_serializing_if = "std::option::Option::is_none")]
262 #[serde(borrow)]
263 pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>,
264 #[serde(borrow)]
265 pub uri: jacquard_common::types::string::AtUri<'a>,
266 #[serde(borrow)]
267 pub value: Log<'a>,
268}
269
270/// Marker type for deserializing records from this collection.
271pub struct LogRecord;
272impl jacquard_common::xrpc::XrpcResp for LogRecord {
273 const NSID: &'static str = "net.anisota.beta.game.log";
274 const ENCODING: &'static str = "application/json";
275 type Output<'de> = LogGetRecordOutput<'de>;
276 type Err<'de> = jacquard_common::types::collection::RecordError<'de>;
277}
278
279impl jacquard_common::types::collection::Collection for Log<'_> {
280 const NSID: &'static str = "net.anisota.beta.game.log";
281 type Record = LogRecord;
282}
283
284impl From<LogGetRecordOutput<'_>> for Log<'_> {
285 fn from(output: LogGetRecordOutput<'_>) -> Self {
286 use jacquard_common::IntoStatic;
287 output.value.into_static()
288 }
289}
290
291///Additional event-specific metadata
292#[jacquard_derive::lexicon]
293#[derive(
294 serde::Serialize,
295 serde::Deserialize,
296 Debug,
297 Clone,
298 PartialEq,
299 Eq,
300 jacquard_derive::IntoStatic
301)]
302#[serde(rename_all = "camelCase")]
303pub struct Metadata<'a> {
304 ///Version of the client application
305 #[serde(skip_serializing_if = "std::option::Option::is_none")]
306 #[serde(borrow)]
307 pub client_version: std::option::Option<jacquard_common::CowStr<'a>>,
308 ///Network latency in milliseconds
309 #[serde(skip_serializing_if = "std::option::Option::is_none")]
310 pub network_latency: std::option::Option<i64>,
311 ///Performance timing data
312 #[serde(skip_serializing_if = "std::option::Option::is_none")]
313 #[serde(borrow)]
314 pub performance_timings: std::option::Option<
315 jacquard_common::types::value::Data<'a>,
316 >,
317 ///Platform (web, mobile, etc.)
318 #[serde(skip_serializing_if = "std::option::Option::is_none")]
319 #[serde(borrow)]
320 pub platform: std::option::Option<jacquard_common::CowStr<'a>>,
321}
322
323///Item received as a reward
324#[jacquard_derive::lexicon]
325#[derive(
326 serde::Serialize,
327 serde::Deserialize,
328 Debug,
329 Clone,
330 PartialEq,
331 Eq,
332 jacquard_derive::IntoStatic
333)]
334#[serde(rename_all = "camelCase")]
335pub struct RewardItem<'a> {
336 #[serde(skip_serializing_if = "std::option::Option::is_none")]
337 #[serde(borrow)]
338 pub item_id: std::option::Option<jacquard_common::CowStr<'a>>,
339 #[serde(skip_serializing_if = "std::option::Option::is_none")]
340 pub quantity: std::option::Option<i64>,
341 #[serde(skip_serializing_if = "std::option::Option::is_none")]
342 #[serde(borrow)]
343 pub rarity: std::option::Option<jacquard_common::CowStr<'a>>,
344}