use super::consistency::Requirement;
use super::LookupPermissionship;
#[derive(Clone, Debug, PartialEq)]
pub enum Consistency {
MinimizeLatency,
AtLeastAsFresh(super::ZedToken),
AtExactSnapshot(super::ZedToken),
FullyConsistent,
}
impl From<Consistency> for super::Consistency {
fn from(consistency: Consistency) -> Self {
let requirement = match consistency {
Consistency::MinimizeLatency => Requirement::MinimizeLatency(true),
Consistency::AtLeastAsFresh(token) => Requirement::AtLeastAsFresh(token),
Consistency::AtExactSnapshot(token) => Requirement::AtExactSnapshot(token),
Consistency::FullyConsistent => Requirement::FullyConsistent(true),
};
super::Consistency {
requirement: Some(requirement),
}
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct SubjectReference {
pub object: super::ObjectReference,
pub optional_relation: Option<String>,
}
impl From<super::SubjectReference> for SubjectReference {
fn from(subject: super::SubjectReference) -> Self {
SubjectReference {
object: subject.object.unwrap(),
optional_relation: if subject.optional_relation.is_empty() {
None
} else {
Some(subject.optional_relation)
},
}
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct Relationship {
pub resource: super::ObjectReference,
pub relation: String,
pub subject: SubjectReference,
pub optional_caveat: Option<super::ContextualizedCaveat>,
}
impl From<super::Relationship> for Relationship {
fn from(rel: super::Relationship) -> Self {
Relationship {
resource: rel.resource.unwrap(),
relation: rel.relation,
subject: rel.subject.unwrap().into(),
optional_caveat: rel.optional_caveat,
}
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct ReadRelationshipsResponse {
pub read_at: super::ZedToken,
pub relationships: Vec<Relationship>,
pub after_result_cursor: Option<super::Cursor>,
}
impl From<super::ReadRelationshipsResponse> for ReadRelationshipsResponse {
fn from(resp: super::ReadRelationshipsResponse) -> Self {
ReadRelationshipsResponse {
read_at: resp.read_at.unwrap(),
relationships: resp.relationship.into_iter().map(|r| r.into()).collect(),
after_result_cursor: resp.after_result_cursor,
}
}
}
pub struct LookupResourcesResponse<Id> {
pub id: Id,
pub looked_up_at: Option<super::ZedToken>,
pub permissionship: LookupPermissionship,
pub missing_caveats: Vec<String>,
pub after_result_cursor: Option<super::Cursor>,
}
pub struct ReadSchemaResponse {
pub schema_text: String,
pub read_at: super::ZedToken,
}
impl From<super::ReadSchemaResponse> for ReadSchemaResponse {
fn from(resp: super::ReadSchemaResponse) -> Self {
ReadSchemaResponse {
schema_text: resp.schema_text,
read_at: resp.read_at.unwrap(),
}
}
}