//! Device objects (SPEC §14.3.3, §14.3.4 E-15, E-17). use serde::{Deserialize, Serialize}; use utoipa::ToSchema; use uuid::Uuid; use super::{TimestampSchema, UuidSchema}; /// Only in `/me`, `/devices` and `/invites/accept`. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] pub struct Device { #[schema(value_type = UuidSchema)] pub id: Uuid, #[schema(value_type = UuidSchema)] pub user_id: Uuid, pub name: String, #[schema(schema_with = super::nullable_int, required = true)] pub app_version_code: Option, /// The app's `versionName` from `X-Kvitt-App-Version-Name` (schema 3); null until a request carried it. #[schema(required = true)] pub app_version_name: Option, #[schema(value_type = TimestampSchema)] pub created_at: String, #[schema(value_type = TimestampSchema)] pub last_seen_at: String, #[schema(value_type = Option, required = true)] pub revoked_at: Option, pub is_current: bool, } /// E-15 `GET /devices`. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] pub struct DeviceList { pub devices: Vec, } /// E-17 `PUT /devices/current/push-token`: the key is required, its value nullable (null clears). #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)] pub struct PushTokenRequest { #[serde(deserialize_with = "super::required_nullable")] #[schema(required = true)] pub fcm_token: Option, }