firestore/db/
transform_models.rs1use crate::errors::*;
2use crate::FirestoreValue;
3
4use crate::timestamp_utils::from_timestamp;
5use crate::FirestoreInstant;
6use rsb_derive::Builder;
7
8#[derive(Debug, PartialEq, Clone, Builder)]
13pub struct FirestoreWriteResult {
14 pub update_time: Option<FirestoreInstant>,
19 pub transform_results: Vec<FirestoreValue>,
27}
28
29impl TryInto<FirestoreWriteResult> for gcloud_sdk::google::firestore::v1::WriteResult {
30 type Error = FirestoreError;
31
32 fn try_into(self) -> Result<FirestoreWriteResult, Self::Error> {
33 Ok(FirestoreWriteResult::new(
34 self.transform_results
35 .into_iter()
36 .map(FirestoreValue::from)
37 .collect(),
38 )
39 .opt_update_time(self.update_time.map(from_timestamp).transpose()?))
40 }
41}
42
43#[derive(Debug, PartialEq, Clone, Builder)]
49pub struct FirestoreFieldTransform {
50 pub field: String,
52 pub transform_type: FirestoreFieldTransformType,
54}
55
56impl TryInto<gcloud_sdk::google::firestore::v1::document_transform::FieldTransform>
57 for FirestoreFieldTransform
58{
59 type Error = FirestoreError;
60
61 fn try_into(
62 self,
63 ) -> Result<gcloud_sdk::google::firestore::v1::document_transform::FieldTransform, Self::Error>
64 {
65 Ok(
66 gcloud_sdk::google::firestore::v1::document_transform::FieldTransform {
67 field_path: self.field,
68 transform_type: Some(self.transform_type.try_into()?),
69 },
70 )
71 }
72}
73
74#[derive(Debug, PartialEq, Clone)]
76pub enum FirestoreFieldTransformType {
77 SetToServerValue(FirestoreTransformServerValue),
79 Increment(FirestoreValue),
81 Maximum(FirestoreValue),
83 Minimum(FirestoreValue),
85 AppendMissingElements(Vec<FirestoreValue>),
88 RemoveAllFromArray(Vec<FirestoreValue>),
91}
92
93impl TryInto<gcloud_sdk::google::firestore::v1::document_transform::field_transform::TransformType>
94 for FirestoreFieldTransformType
95{
96 type Error = FirestoreError;
97
98 fn try_into(
99 self,
100 ) -> Result<
101 gcloud_sdk::google::firestore::v1::document_transform::field_transform::TransformType,
102 Self::Error,
103 > {
104 Ok(match self {
105 FirestoreFieldTransformType::SetToServerValue(FirestoreTransformServerValue::Unspecified) => {
106 gcloud_sdk::google::firestore::v1::document_transform::field_transform::TransformType::SetToServerValue(
107 gcloud_sdk::google::firestore::v1::document_transform::field_transform::ServerValue::Unspecified as i32
108 )
109 },
110 FirestoreFieldTransformType::SetToServerValue(FirestoreTransformServerValue::RequestTime) => {
111 gcloud_sdk::google::firestore::v1::document_transform::field_transform::TransformType::SetToServerValue(
112 gcloud_sdk::google::firestore::v1::document_transform::field_transform::ServerValue::RequestTime as i32
113 )
114 },
115 FirestoreFieldTransformType::Increment(value) => {
116 gcloud_sdk::google::firestore::v1::document_transform::field_transform::TransformType::Increment(
117 value.value
118 )
119 },
120 FirestoreFieldTransformType::Maximum(value) => {
121 gcloud_sdk::google::firestore::v1::document_transform::field_transform::TransformType::Maximum(
122 value.value
123 )
124 },
125 FirestoreFieldTransformType::Minimum(value) => {
126 gcloud_sdk::google::firestore::v1::document_transform::field_transform::TransformType::Minimum(
127 value.value
128 )
129 },
130 FirestoreFieldTransformType::AppendMissingElements(value) => {
131 gcloud_sdk::google::firestore::v1::document_transform::field_transform::TransformType::AppendMissingElements(
132 gcloud_sdk::google::firestore::v1::ArrayValue {
133 values: value.into_iter().map( | s| s.value).collect()
134 }
135 )
136 },
137 FirestoreFieldTransformType::RemoveAllFromArray(value) => {
138 gcloud_sdk::google::firestore::v1::document_transform::field_transform::TransformType::RemoveAllFromArray(
139 gcloud_sdk::google::firestore::v1::ArrayValue {
140 values: value.into_iter().map( | s| s.value).collect()
141 }
142 )
143 },
144 })
145 }
146}
147
148#[derive(Debug, Eq, PartialEq, Clone)]
150pub enum FirestoreTransformServerValue {
151 Unspecified,
153 RequestTime,
156}