use crate::headers;
use azure_core::{headers::HeaderValue, Request as HttpRequest};
use serde::Serialize;
pub trait CosmosEntity {
type Entity: Serialize;
fn partition_key(&self) -> Self::Entity;
}
impl CosmosEntity for serde_json::Value {
type Entity = Self;
fn partition_key(&self) -> Self::Entity {
self.clone()
}
}
pub(crate) fn serialize_partition_key<PK: Serialize>(pk: &PK) -> azure_core::Result<String> {
use azure_core::error::ResultExt;
serde_json::to_string(&[pk]).context(
azure_core::error::ErrorKind::DataConversion,
"could not convert partition_key into String",
)
}
pub(crate) fn add_as_partition_key_header_serialized(
partition_key_serialized: &str,
request: &mut HttpRequest,
) {
request.insert_header(
headers::HEADER_DOCUMENTDB_PARTITIONKEY,
HeaderValue::from(partition_key_serialized.to_string()),
);
}