1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use serde::{de::DeserializeOwned, Serialize}; use std::fmt::Display; /// Documents are not a predefined structure. /// You can use your structs as documents by implementing that trait. /// /// **WARNING**! The get_uid() method **MUST** only return an object that displays himself only using alphanumeric characters, '/' and '-'. /// Otherwise, the MeiliSearch server will reject your documents. /// /// *To be able to use derive with serde, put this line on your Cargo.toml: `serde = {version="1.0", features=["derive"]}`.* /// /// # Example /// /// ``` /// # use meilisearch_sdk::document::Document; /// use serde::{Serialize, Deserialize}; /// /// #[derive(Serialize, Deserialize, Debug)] /// struct Movie { /// id: usize, /// name: String, /// description: String, /// } /// /// impl Document for Movie { /// type UIDType = usize; /// /// fn get_uid(&self) -> &Self::UIDType { /// &self.id /// } /// } /// ``` pub trait Document: DeserializeOwned + std::fmt::Debug + Serialize { /// The type of the primary key type UIDType: Display; /// The method returning the primary key of the Document. /// /// **WARNING**! This method **MUST** only return an object that displays himself only using alphanumeric characters, '/' and '-'. /// Otherwise, the MeiliSearch server will reject your document. fn get_uid(&self) -> &Self::UIDType; }