A better Rust ATProto crate
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}