A better Rust ATProto crate
at main 10 kB view raw
1// @generated by jacquard-lexicon. DO NOT EDIT. 2// 3// Lexicon: net.anisota.beta.game.session 4// 5// This file was automatically generated from Lexicon schemas. 6// Any manual changes will be overwritten on the next regeneration. 7 8/// Summary of activity during this session 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 ActivitySummary<'a> { 22 /// Player's current level at the time of this session update 23 #[serde(skip_serializing_if = "std::option::Option::is_none")] 24 pub current_level: std::option::Option<i64>, 25 /// Player's total XP at the time of this session update 26 #[serde(skip_serializing_if = "std::option::Option::is_none")] 27 pub current_xp: std::option::Option<i64>, 28 #[serde(skip_serializing_if = "std::option::Option::is_none")] 29 #[serde(borrow)] 30 pub game_actions: std::option::Option< 31 crate::net_anisota::beta::game::session::GameActions<'a>, 32 >, 33 /// List of unique pages/routes visited 34 #[serde(skip_serializing_if = "std::option::Option::is_none")] 35 #[serde(borrow)] 36 pub pages_visited: std::option::Option<Vec<jacquard_common::CowStr<'a>>>, 37 /// Total number of events logged in this session 38 #[serde(skip_serializing_if = "std::option::Option::is_none")] 39 pub total_events: std::option::Option<i64>, 40 /// Total XP gained during this specific session 41 #[serde(skip_serializing_if = "std::option::Option::is_none")] 42 pub xp_gained_this_session: std::option::Option<i64>, 43} 44 45/// Game-specific actions performed 46#[jacquard_derive::lexicon] 47#[derive( 48 serde::Serialize, 49 serde::Deserialize, 50 Debug, 51 Clone, 52 PartialEq, 53 Eq, 54 jacquard_derive::IntoStatic, 55 Default 56)] 57#[serde(rename_all = "camelCase")] 58pub struct GameActions<'a> { 59 #[serde(skip_serializing_if = "std::option::Option::is_none")] 60 pub daily_rewards_claimed: std::option::Option<i64>, 61 #[serde(skip_serializing_if = "std::option::Option::is_none")] 62 pub feeds_loaded: std::option::Option<i64>, 63 #[serde(skip_serializing_if = "std::option::Option::is_none")] 64 pub items_collected: std::option::Option<i64>, 65 #[serde(skip_serializing_if = "std::option::Option::is_none")] 66 pub level_ups: std::option::Option<i64>, 67 #[serde(skip_serializing_if = "std::option::Option::is_none")] 68 pub posts_viewed: std::option::Option<i64>, 69 #[serde(skip_serializing_if = "std::option::Option::is_none")] 70 pub specimens_collected: std::option::Option<i64>, 71} 72 73/// A game session record tracking a continuous period of user engagement with the application 74#[jacquard_derive::lexicon] 75#[derive( 76 serde::Serialize, 77 serde::Deserialize, 78 Debug, 79 Clone, 80 PartialEq, 81 Eq, 82 jacquard_derive::IntoStatic, 83 bon::Builder 84)] 85#[serde(rename_all = "camelCase")] 86pub struct Session<'a> { 87 #[serde(skip_serializing_if = "std::option::Option::is_none")] 88 #[builder(into)] 89 #[serde(borrow)] 90 pub activity_summary: Option< 91 crate::net_anisota::beta::game::session::ActivitySummary<'a>, 92 >, 93 /// Version of the client application 94 #[serde(borrow)] 95 #[builder(into)] 96 pub client_version: jacquard_common::CowStr<'a>, 97 /// When the session record was created 98 #[serde(skip_serializing_if = "std::option::Option::is_none")] 99 #[builder(into)] 100 pub created_at: Option<jacquard_common::types::string::Datetime>, 101 /// Total session duration in milliseconds (calculated when session ends) 102 #[serde(skip_serializing_if = "std::option::Option::is_none")] 103 #[builder(into)] 104 pub duration: Option<i64>, 105 /// Why the session ended 106 #[serde(skip_serializing_if = "std::option::Option::is_none")] 107 #[builder(into)] 108 #[serde(borrow)] 109 pub end_reason: Option<jacquard_common::CowStr<'a>>, 110 /// When the session ended (ISO 8601) 111 #[serde(skip_serializing_if = "std::option::Option::is_none")] 112 #[builder(into)] 113 pub ended_at: Option<jacquard_common::types::string::Datetime>, 114 /// Timestamp of the last recorded activity in this session 115 #[serde(skip_serializing_if = "std::option::Option::is_none")] 116 #[builder(into)] 117 pub last_activity_at: Option<jacquard_common::types::string::Datetime>, 118 #[serde(skip_serializing_if = "std::option::Option::is_none")] 119 #[builder(into)] 120 #[serde(borrow)] 121 pub metadata: Option<crate::net_anisota::beta::game::session::Metadata<'a>>, 122 /// URI of the previous session if this is a continuation (e.g., after brief inactivity) 123 #[serde(skip_serializing_if = "std::option::Option::is_none")] 124 #[builder(into)] 125 #[serde(borrow)] 126 pub parent_session_uri: Option<jacquard_common::CowStr<'a>>, 127 /// Platform where the session occurred 128 #[serde(borrow)] 129 #[builder(into)] 130 pub platform: jacquard_common::CowStr<'a>, 131 /// URIs of log records that occurred during this session 132 #[serde(skip_serializing_if = "std::option::Option::is_none")] 133 #[builder(into)] 134 #[serde(borrow)] 135 pub related_log_uris: Option<Vec<jacquard_common::CowStr<'a>>>, 136 /// URIs of progress records created during this session 137 #[serde(skip_serializing_if = "std::option::Option::is_none")] 138 #[builder(into)] 139 #[serde(borrow)] 140 pub related_progress_uris: Option<Vec<jacquard_common::CowStr<'a>>>, 141 /// URIs of related sessions (e.g., same day, same device) 142 #[serde(skip_serializing_if = "std::option::Option::is_none")] 143 #[builder(into)] 144 #[serde(borrow)] 145 pub related_session_uris: Option<Vec<jacquard_common::CowStr<'a>>>, 146 #[serde(skip_serializing_if = "std::option::Option::is_none")] 147 #[builder(into)] 148 #[serde(borrow)] 149 pub session_context: Option< 150 crate::net_anisota::beta::game::session::SessionContext<'a>, 151 >, 152 /// When the session began (ISO 8601) 153 pub started_at: jacquard_common::types::string::Datetime, 154 /// Current status of the session 155 #[serde(borrow)] 156 #[builder(into)] 157 pub status: jacquard_common::CowStr<'a>, 158 /// When the session record was last updated 159 #[serde(skip_serializing_if = "std::option::Option::is_none")] 160 #[builder(into)] 161 pub updated_at: Option<jacquard_common::types::string::Datetime>, 162} 163 164/// Typed wrapper for GetRecord response with this collection's record type. 165#[derive( 166 serde::Serialize, 167 serde::Deserialize, 168 Debug, 169 Clone, 170 PartialEq, 171 Eq, 172 jacquard_derive::IntoStatic 173)] 174#[serde(rename_all = "camelCase")] 175pub struct SessionGetRecordOutput<'a> { 176 #[serde(skip_serializing_if = "std::option::Option::is_none")] 177 #[serde(borrow)] 178 pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 179 #[serde(borrow)] 180 pub uri: jacquard_common::types::string::AtUri<'a>, 181 #[serde(borrow)] 182 pub value: Session<'a>, 183} 184 185/// Marker type for deserializing records from this collection. 186pub struct SessionRecord; 187impl jacquard_common::xrpc::XrpcResp for SessionRecord { 188 const NSID: &'static str = "net.anisota.beta.game.session"; 189 const ENCODING: &'static str = "application/json"; 190 type Output<'de> = SessionGetRecordOutput<'de>; 191 type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 192} 193 194impl jacquard_common::types::collection::Collection for Session<'_> { 195 const NSID: &'static str = "net.anisota.beta.game.session"; 196 type Record = SessionRecord; 197} 198 199impl From<SessionGetRecordOutput<'_>> for Session<'_> { 200 fn from(output: SessionGetRecordOutput<'_>) -> Self { 201 use jacquard_common::IntoStatic; 202 output.value.into_static() 203 } 204} 205 206/// Additional session metadata 207#[jacquard_derive::lexicon] 208#[derive( 209 serde::Serialize, 210 serde::Deserialize, 211 Debug, 212 Clone, 213 PartialEq, 214 Eq, 215 jacquard_derive::IntoStatic, 216 Default 217)] 218#[serde(rename_all = "camelCase")] 219pub struct Metadata<'a> { 220 /// List of features used during the session 221 #[serde(skip_serializing_if = "std::option::Option::is_none")] 222 #[serde(borrow)] 223 pub features: std::option::Option<Vec<jacquard_common::CowStr<'a>>>, 224 /// Network condition during session 225 #[serde(skip_serializing_if = "std::option::Option::is_none")] 226 #[serde(borrow)] 227 pub network_condition: std::option::Option<jacquard_common::CowStr<'a>>, 228 #[serde(skip_serializing_if = "std::option::Option::is_none")] 229 #[serde(borrow)] 230 pub performance_metrics: std::option::Option< 231 crate::net_anisota::beta::game::session::PerformanceMetrics<'a>, 232 >, 233} 234 235/// Performance-related data 236#[jacquard_derive::lexicon] 237#[derive( 238 serde::Serialize, 239 serde::Deserialize, 240 Debug, 241 Clone, 242 PartialEq, 243 Eq, 244 jacquard_derive::IntoStatic, 245 Default 246)] 247#[serde(rename_all = "camelCase")] 248pub struct PerformanceMetrics<'a> { 249 /// Average API response time in milliseconds (rounded to nearest integer) 250 #[serde(skip_serializing_if = "std::option::Option::is_none")] 251 pub average_response_time: std::option::Option<i64>, 252 /// Number of errors encountered 253 #[serde(skip_serializing_if = "std::option::Option::is_none")] 254 pub error_count: std::option::Option<i64>, 255} 256 257/// Context about how the session started 258#[jacquard_derive::lexicon] 259#[derive( 260 serde::Serialize, 261 serde::Deserialize, 262 Debug, 263 Clone, 264 PartialEq, 265 Eq, 266 jacquard_derive::IntoStatic, 267 Default 268)] 269#[serde(rename_all = "camelCase")] 270pub struct SessionContext<'a> { 271 /// How the user was authenticated 272 #[serde(skip_serializing_if = "std::option::Option::is_none")] 273 #[serde(borrow)] 274 pub authentication_method: std::option::Option<jacquard_common::CowStr<'a>>, 275 /// How the user entered the app 276 #[serde(skip_serializing_if = "std::option::Option::is_none")] 277 #[serde(borrow)] 278 pub entry_point: std::option::Option<jacquard_common::CowStr<'a>>, 279 /// Whether this was a new user's first session 280 #[serde(skip_serializing_if = "std::option::Option::is_none")] 281 pub is_new_user: std::option::Option<bool>, 282 /// Referrer URL if applicable 283 #[serde(skip_serializing_if = "std::option::Option::is_none")] 284 #[serde(borrow)] 285 pub referrer: std::option::Option<jacquard_common::CowStr<'a>>, 286}