use serde::Serialize;
pub mod auth;
pub mod capabilities;
mod config;
mod endpoint;
mod export;
mod query;
mod resource;
mod tls;
pub use config::*;
pub use endpoint::*;
pub use export::*;
pub use query::*;
pub use resource::*;
use serde_content::Serializer;
use serde_content::Value as Content;
#[cfg(any(feature = "native-tls", feature = "rustls"))]
pub use tls::*;
type UnitOp<'a> = InnerOp<'a, ()>;
#[derive(Debug, Serialize)]
#[serde(tag = "op", rename_all = "lowercase")]
enum InnerOp<'a, T> {
Add {
path: &'a str,
value: T,
},
Remove {
path: &'a str,
},
Replace {
path: &'a str,
value: T,
},
Change {
path: &'a str,
value: String,
},
}
#[derive(Debug)]
#[must_use]
pub struct PatchOp(pub(crate) serde_content::Result<Content<'static>>);
impl PatchOp {
pub fn add<T>(path: &str, value: T) -> Self
where
T: Serialize,
{
Self(Serializer::new().serialize(InnerOp::Add {
path,
value,
}))
}
pub fn remove(path: &str) -> Self {
Self(Serializer::new().serialize(UnitOp::Remove {
path,
}))
}
pub fn replace<T>(path: &str, value: T) -> Self
where
T: Serialize,
{
Self(Serializer::new().serialize(InnerOp::Replace {
path,
value,
}))
}
pub fn change(path: &str, diff: String) -> Self {
Self(Serializer::new().serialize(UnitOp::Change {
path,
value: diff,
}))
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[non_exhaustive]
pub enum WaitFor {
Connection,
Database,
}