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