57 releases (16 stable)

Uses new Rust 2024

new 1.0.16 Feb 25, 2026
1.0.14 Nov 10, 2025
1.0.7 Jul 14, 2025
1.0.3 Feb 13, 2025
0.6.0 Dec 30, 2023

#479 in Database interfaces

Download history 59/week @ 2025-11-05 37/week @ 2025-11-12 44/week @ 2025-11-19 38/week @ 2025-11-26 32/week @ 2025-12-03 41/week @ 2025-12-10 64/week @ 2025-12-17 7/week @ 2025-12-24 29/week @ 2025-12-31 60/week @ 2026-01-07 79/week @ 2026-01-14 49/week @ 2026-01-21 50/week @ 2026-01-28 102/week @ 2026-02-04 86/week @ 2026-02-11 117/week @ 2026-02-18

373 downloads per month

MIT/Apache

140KB
2K SLoC

firestore-path

A Firestore path helper.

ci crates.io docs.rs license

Examples

use firestore_path::{CollectionId, CollectionName, CollectionPath, DatabaseId, DatabaseName, DocumentId, DocumentName, DocumentPath, ProjectId, RootDocumentName};
use std::str::FromStr;

let project_id = ProjectId::from_str("my-project")?;
let database_id = DatabaseId::from_str("my-database")?;
let database_name = DatabaseName::new(project_id, database_id);
assert_eq!(database_name.to_string(), "projects/my-project/databases/my-database");
// assert_eq!(
//     DatabaseName::from_project_id("my-project")?.to_string(),
//     "projects/my-project/databases/(default)"
// );

let root_document_name: RootDocumentName = database_name.root_document_name();
assert_eq!(root_document_name.to_string(), "projects/my-project/databases/my-database/documents");

let collection_name: CollectionName = root_document_name.collection("chatrooms")?;
assert_eq!(collection_name.to_string(), "projects/my-project/databases/my-database/documents/chatrooms");
assert_eq!(collection_name.collection_id().as_ref(), "chatrooms");

let document_name: DocumentName = collection_name.doc("chatroom1")?;
assert_eq!(document_name.to_string(), "projects/my-project/databases/my-database/documents/chatrooms/chatroom1");
assert_eq!(document_name.collection_id().as_ref(), "chatrooms");
assert_eq!(document_name.document_id().as_ref(), "chatroom1");

let collection_id = CollectionId::from_str("messages")?;
let collection_path = CollectionPath::from(collection_id);
assert_eq!(collection_path.to_string(), "messages");

let document_id = DocumentId::from_str("message1")?;
let document_path: DocumentPath = collection_path.doc(document_id)?;
assert_eq!(document_path.to_string(), "messages/message1");

let child_document_name = document_name.doc(document_path)?;
assert_eq!(
    child_document_name.to_string(),
    "projects/my-project/databases/my-database/documents/chatrooms/chatroom1/messages/message1"
);

License

Licensed under either of

at your option.

Dependencies

~150–550KB
~13K SLoC