use_prelude!();
use std::sync::Arc;
pub use ffi_sdk::DittoSmallPeerInfoSyncScope;
pub struct SmallPeerInfo {
ditto: Arc<ffi_sdk::BoxedDitto>,
}
impl SmallPeerInfo {
pub(crate) fn new(ditto: Arc<ffi_sdk::BoxedDitto>) -> Self {
Self { ditto }
}
pub fn is_enabled(&self) -> bool {
ffi_sdk::ditto_small_peer_info_get_is_enabled(&self.ditto)
}
pub fn set_enabled(&self, enabled: bool) {
ffi_sdk::ditto_small_peer_info_set_enabled(&self.ditto, enabled);
}
pub fn sync_scope(&self) -> DittoSmallPeerInfoSyncScope {
ffi_sdk::ditto_small_peer_info_get_sync_scope(&self.ditto)
}
pub fn set_sync_scope(&self, sync_scope: DittoSmallPeerInfoSyncScope) {
ffi_sdk::ditto_small_peer_info_set_sync_scope(&self.ditto, sync_scope)
}
pub fn metadata<T: serde::de::DeserializeOwned>(&self) -> Result<T, DittoError> {
let result = ffi_sdk::ditto_small_peer_info_get_metadata(&self.ditto);
serde_json::from_str(result.to_str()).map_err(Into::into)
}
pub fn set_metadata<T: serde::Serialize>(&self, metadata: &T) -> Result<(), DittoError> {
let json_string = serde_json::to_string(metadata)?;
let result = ffi_sdk::ditto_small_peer_info_set_metadata(
&self.ditto,
char_p::new(json_string).as_ref(),
);
if result != 0 {
return Err(DittoError::from_small_peer_info_error_code(result));
}
Ok(())
}
pub fn metadata_json_string(&self) -> Result<String, DittoError> {
let result = ffi_sdk::ditto_small_peer_info_get_metadata(&self.ditto);
Ok(result.into_string())
}
pub fn set_metadata_json_string(&self, metadata: &str) -> Result<(), DittoError> {
let result = ffi_sdk::ditto_small_peer_info_set_metadata(
&self.ditto,
char_p::new(metadata).as_ref(),
);
if result != 0 {
return Err(DittoError::from_small_peer_info_error_code(result));
}
Ok(())
}
}