use crate::{Compatibility, GetCompatibility, SchemaRegistryError, SubjectName};
use super::SchemaRegistry;
#[derive(Debug)]
pub struct ConfigClient<'sr> {
pub(super) sr: &'sr SchemaRegistry,
}
impl ConfigClient<'_> {
#[tracing::instrument(skip(self))]
pub async fn set(
&self,
compatibility: Compatibility,
) -> Result<Compatibility, SchemaRegistryError> {
let url = self.sr.base_url.join("config")?;
self.sr.put(url, &compatibility).await
}
#[tracing::instrument(skip(self))]
pub async fn get(&self) -> Result<GetCompatibility, SchemaRegistryError> {
let url = self.sr.base_url.join("config")?;
self.sr.get(url).await
}
#[tracing::instrument(skip(self))]
pub async fn set_subject(
&self,
subject: &SubjectName,
compatibility: Compatibility,
) -> Result<Compatibility, SchemaRegistryError> {
let path = format!("config/{subject}");
let url = self.sr.base_url.join(&path)?;
self.sr.put(url, &compatibility).await
}
#[tracing::instrument(skip(self))]
pub async fn get_subject(
&self,
subject: &SubjectName,
default_to_global: Option<bool>,
) -> Result<GetCompatibility, SchemaRegistryError> {
let path = format!("config/{subject}");
let mut url = self.sr.base_url.join(&path)?;
if let Some(default_to_global) = default_to_global {
let query = format!("defaultToGlobal={default_to_global}");
url.set_query(Some(&query));
}
self.sr.get(url).await
}
#[tracing::instrument(skip(self))]
pub async fn delete_subject(
&self,
subject: &SubjectName,
) -> Result<GetCompatibility, SchemaRegistryError> {
let path = format!("config/{subject}");
let url = self.sr.base_url.join(&path)?;
self.sr.delete(url).await
}
}