1use super::*;
4
5pub struct Circles<'a> {
10 handle: &'a CovenHandle,
12}
13
14impl<'a> Circles<'a> {
15 pub(crate) fn new(handle: &'a CovenHandle) -> Self {
16 Self { handle }
17 }
18 pub async fn reset(&self, circle: CircleId) -> Result<(), SyncError> {
20 self.handle.storage.reset(Audience::Circle(circle)).await
21 }
22
23 pub async fn create(&self, name: &str) -> Result<(CircleId, OperationId), SyncError> {
25 let name = name.to_owned();
26 self.handle.write(move |write| write.create_circle(&name)).await
27 }
28 pub async fn rename(
30 &self,
31 circle: CircleId,
32 name: &str,
33 ) -> Result<Option<OperationId>, SyncError> {
34 let name = name.to_owned();
35 self.handle.write(move |write| write.rename_circle(circle, &name)).await
36 }
37 pub async fn delete(&self, circle: CircleId) -> Result<Option<OperationId>, SyncError> {
39 self.handle.write(move |write| write.delete_circle(circle)).await
40 }
41 pub async fn add_member(
43 &self,
44 circle: CircleId,
45 member: &MemberId,
46 ) -> Result<Option<OperationId>, SyncError> {
47 let member = *member;
48 self.handle.write(move |write| write.add_circle_member(circle, &member)).await
49 }
50 pub async fn remove_member(
52 &self,
53 circle: CircleId,
54 member: &MemberId,
55 ) -> Result<Option<OperationId>, SyncError> {
56 let member = *member;
57 self.handle.write(move |write| write.remove_circle_member(circle, &member)).await
58 }
59 pub async fn list(&self) -> CovenResult<Vec<Circle>> {
61 self.handle.database.circles().await.map_err(CovenError::from)
62 }
63 pub fn subscribe_list(&self) -> LiveQuery<Vec<Circle>, CovenError> {
65 self.handle.database.subscribe_circles()
66 }
67 pub async fn members(&self, circle: CircleId) -> CovenResult<Vec<CircleMemberInfo>> {
69 self.handle.database.circle_members(circle).await.map_err(CovenError::from)
70 }
71 pub fn subscribe_members(
73 &self,
74 circle: CircleId,
75 ) -> LiveQuery<Vec<CircleMemberInfo>, CovenError> {
76 self.handle.database.subscribe_circle_members(circle)
77 }
78}