use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct FirestoreValue {
#[serde(skip_serializing_if = "Option::is_none")]
pub string_value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub integer_value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub boolean_value: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp_value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub map_value: Option<MapValue>,
#[serde(skip_serializing_if = "Option::is_none")]
pub array_value: Option<ArrayValue>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ArrayValue {
#[serde(default)]
pub values: Vec<FirestoreValue>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct MapValue {
pub fields: std::collections::HashMap<String, FirestoreValue>,
}
pub fn str_val(s: &str) -> FirestoreValue {
FirestoreValue {
string_value: Some(s.to_string()),
integer_value: None,
boolean_value: None,
timestamp_value: None,
map_value: None,
array_value: None,
}
}
pub fn bool_val(b: bool) -> FirestoreValue {
FirestoreValue {
string_value: None,
integer_value: None,
boolean_value: Some(b),
timestamp_value: None,
map_value: None,
array_value: None,
}
}
pub fn ts_val(ts: &str) -> FirestoreValue {
FirestoreValue {
string_value: None,
integer_value: None,
boolean_value: None,
timestamp_value: Some(ts.to_string()),
map_value: None,
array_value: None,
}
}
pub fn int_val(i: i64) -> FirestoreValue {
FirestoreValue {
string_value: None,
integer_value: Some(i.to_string()),
boolean_value: None,
timestamp_value: None,
map_value: None,
array_value: None,
}
}
pub fn map_val(fields: std::collections::HashMap<String, FirestoreValue>) -> FirestoreValue {
FirestoreValue {
string_value: None,
integer_value: None,
boolean_value: None,
timestamp_value: None,
map_value: Some(MapValue { fields }),
array_value: None,
}
}
pub fn str_array_val(items: &[String]) -> FirestoreValue {
FirestoreValue {
string_value: None,
integer_value: None,
boolean_value: None,
timestamp_value: None,
map_value: None,
array_value: Some(ArrayValue {
values: items.iter().map(|s| str_val(s)).collect(),
}),
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct FirestoreDocument<T> {
pub name: String,
pub fields: T,
#[serde(rename = "createTime")]
pub create_time: Option<String>,
#[serde(rename = "updateTime")]
pub update_time: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct DeviceFields {
#[serde(rename = "appTag", skip_serializing_if = "Option::is_none")]
pub app_tag: Option<FirestoreValue>,
#[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
pub user_id: Option<FirestoreValue>,
#[serde(rename = "deviceId", skip_serializing_if = "Option::is_none")]
pub device_id: Option<FirestoreValue>,
#[serde(rename = "deviceName", skip_serializing_if = "Option::is_none")]
pub device_name: Option<FirestoreValue>,
#[serde(rename = "nodeId", skip_serializing_if = "Option::is_none")]
pub node_id: Option<FirestoreValue>,
#[serde(rename = "platformType", skip_serializing_if = "Option::is_none")]
pub platform_type: Option<FirestoreValue>,
#[serde(rename = "sessionId", skip_serializing_if = "Option::is_none")]
pub session_id: Option<FirestoreValue>,
#[serde(rename = "tag", skip_serializing_if = "Option::is_none")]
pub tag: Option<FirestoreValue>,
#[serde(rename = "kind", skip_serializing_if = "Option::is_none")]
pub kind: Option<FirestoreValue>,
#[serde(rename = "capabilities", skip_serializing_if = "Option::is_none")]
pub capabilities: Option<FirestoreValue>,
#[serde(rename = "metadata", skip_serializing_if = "Option::is_none")]
pub metadata: Option<FirestoreValue>,
#[serde(rename = "online", skip_serializing_if = "Option::is_none")]
pub online: Option<FirestoreValue>,
#[serde(rename = "ticket", skip_serializing_if = "Option::is_none")]
pub ticket: Option<FirestoreValue>,
#[serde(rename = "lastSeenAt", skip_serializing_if = "Option::is_none")]
pub last_seen_at: Option<FirestoreValue>,
#[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
pub created_at: Option<FirestoreValue>,
#[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
pub updated_at: Option<FirestoreValue>,
#[serde(rename = "lastSeen", skip_serializing_if = "Option::is_none")]
pub last_seen: Option<FirestoreValue>,
#[serde(rename = "expiresAt", skip_serializing_if = "Option::is_none")]
pub expires_at: Option<FirestoreValue>,
#[serde(rename = "excludedPeers", skip_serializing_if = "Option::is_none")]
pub excluded_peers: Option<FirestoreValue>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct RoomMemberFields {
#[serde(rename = "appTag", skip_serializing_if = "Option::is_none")]
pub app_tag: Option<FirestoreValue>,
#[serde(rename = "nodeId", skip_serializing_if = "Option::is_none")]
pub node_id: Option<FirestoreValue>,
#[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
pub user_id: Option<FirestoreValue>,
#[serde(rename = "ticket", skip_serializing_if = "Option::is_none")]
pub ticket: Option<FirestoreValue>,
#[serde(rename = "joinedAt", skip_serializing_if = "Option::is_none")]
pub joined_at: Option<FirestoreValue>,
#[serde(rename = "lastSeenAt", skip_serializing_if = "Option::is_none")]
pub last_seen_at: Option<FirestoreValue>,
#[serde(rename = "expiresAt", skip_serializing_if = "Option::is_none")]
pub expires_at: Option<FirestoreValue>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct RoomDocFields {
#[serde(rename = "appTag", skip_serializing_if = "Option::is_none")]
pub app_tag: Option<FirestoreValue>,
#[serde(rename = "hostId", skip_serializing_if = "Option::is_none")]
pub host_id: Option<FirestoreValue>,
#[serde(rename = "memberCount", skip_serializing_if = "Option::is_none")]
pub member_count: Option<FirestoreValue>,
#[serde(rename = "maxMembers", skip_serializing_if = "Option::is_none")]
pub max_members: Option<FirestoreValue>,
#[serde(rename = "status", skip_serializing_if = "Option::is_none")]
pub status: Option<FirestoreValue>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct RoomAccessFields {
#[serde(rename = "appTag", skip_serializing_if = "Option::is_none")]
pub app_tag: Option<FirestoreValue>,
#[serde(rename = "roomId", skip_serializing_if = "Option::is_none")]
pub room_id: Option<FirestoreValue>,
#[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
pub user_id: Option<FirestoreValue>,
#[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
pub created_at: Option<FirestoreValue>,
#[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
pub updated_at: Option<FirestoreValue>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct SignalingEnvelopeFields {
#[serde(rename = "appTag", skip_serializing_if = "Option::is_none")]
pub app_tag: Option<FirestoreValue>,
#[serde(rename = "senderId", skip_serializing_if = "Option::is_none")]
pub sender_id: Option<FirestoreValue>,
#[serde(rename = "targetId", skip_serializing_if = "Option::is_none")]
pub target_id: Option<FirestoreValue>,
#[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
pub payload: Option<FirestoreValue>,
#[serde(rename = "state", skip_serializing_if = "Option::is_none")]
pub state: Option<FirestoreValue>,
#[serde(rename = "replyPayload", skip_serializing_if = "Option::is_none")]
pub reply_payload: Option<FirestoreValue>,
#[serde(rename = "timestamp", skip_serializing_if = "Option::is_none")]
pub timestamp: Option<FirestoreValue>,
#[serde(rename = "senderUserId", skip_serializing_if = "Option::is_none")]
pub sender_user_id: Option<FirestoreValue>,
#[serde(rename = "targetUserId", skip_serializing_if = "Option::is_none")]
pub target_user_id: Option<FirestoreValue>,
#[serde(rename = "expiresAt", skip_serializing_if = "Option::is_none")]
pub expires_at: Option<FirestoreValue>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct DeveloperAppFields {
#[serde(rename = "limits", skip_serializing_if = "Option::is_none")]
pub limits: Option<FirestoreValue>, #[serde(rename = "plan", skip_serializing_if = "Option::is_none")]
pub plan: Option<FirestoreValue>,
#[serde(rename = "status", skip_serializing_if = "Option::is_none")]
pub status: Option<FirestoreValue>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct SignalingSessionFields {
#[serde(rename = "appTag", skip_serializing_if = "Option::is_none")]
pub app_tag: Option<FirestoreValue>,
#[serde(rename = "connectionId", skip_serializing_if = "Option::is_none")]
pub connection_id: Option<FirestoreValue>,
#[serde(rename = "initiatorDeviceId", skip_serializing_if = "Option::is_none")]
pub initiator_device_id: Option<FirestoreValue>,
#[serde(rename = "targetDeviceId", skip_serializing_if = "Option::is_none")]
pub target_device_id: Option<FirestoreValue>,
#[serde(rename = "state", skip_serializing_if = "Option::is_none")]
pub state: Option<FirestoreValue>,
#[serde(rename = "offer", skip_serializing_if = "Option::is_none")]
pub offer: Option<FirestoreValue>,
#[serde(rename = "answer", skip_serializing_if = "Option::is_none")]
pub answer: Option<FirestoreValue>,
#[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
pub created_at: Option<FirestoreValue>,
}