use super::document_snapshot::{DocumentSnapshot, SnapshotMetadata};
use crate::firestore::firestore::FirestoreInner;
#[derive(Clone)]
pub struct QuerySnapshot {
pub(crate) documents: Vec<super::field_value::proto::google::firestore::v1::Document>,
pub(crate) firestore: std::sync::Arc<FirestoreInner>,
}
impl QuerySnapshot {
pub fn documents(&self) -> Vec<DocumentSnapshot> {
self.documents
.iter()
.map(|doc| {
let data = if doc.fields.is_empty() {
None
} else {
Some(super::field_value::MapValue {
fields: doc.fields.clone(),
})
};
DocumentSnapshot {
data,
reference: super::document_reference::DocumentReference::new(
doc.name.clone(),
std::sync::Arc::clone(&self.firestore),
),
metadata: SnapshotMetadata::default(),
}
})
.collect()
}
pub fn is_empty(&self) -> bool {
self.documents.is_empty()
}
pub fn len(&self) -> usize {
self.documents.len()
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DocumentChangeType {
Added,
Modified,
Removed,
}
#[derive(Debug, Clone)]
pub struct DocumentChange {
pub change_type: DocumentChangeType,
pub document: DocumentSnapshot,
pub old_index: i32,
pub new_index: i32,
}