use serde::{Deserialize, Serialize};
use typed_builder::TypedBuilder;
pub(crate) const GHARIAL_API_PATH: &str = "_api/gharial";
#[derive(Debug, Clone, Serialize, Deserialize, Default, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct Graph {
#[builder(default)]
pub name: String,
#[builder(default)]
pub edge_definitions: Vec<EdgeDefinition>,
#[builder(default)]
#[serde(skip_serializing_if = "Vec::is_empty", default = "Vec::new")]
pub orphan_collections: Vec<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub is_smart: Option<bool>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub is_disjoint: Option<bool>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<GraphOptions>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GraphOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub smart_graph_attribute: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub number_of_shards: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub replication_factor: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub write_concern: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EdgeDefinition {
pub collection: String,
pub from: Vec<String>,
pub to: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GraphCollection {
pub graphs: Vec<Graph>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GraphResponse {
pub graph: Graph,
}