monsta_client/
universe.rs1use monsta_proto::*;
2
3use crate::{client::Client, metadata, Database, Error, Result};
4
5pub struct Universe {
6 client: Client,
7}
8
9impl Universe {
10 pub async fn connect(url: String) -> Result<Self> {
11 let client = Client::connect(url).await?;
12 Ok(Self { client })
13 }
14
15 pub async fn create_database(
16 &self,
17 spec: impl Into<metadata::DatabaseSpec>,
18 ) -> Result<Database> {
19 let req = DatabaseRequest {
20 create_database: Some(CreateDatabaseRequest {
21 spec: Some(spec.into().into()),
22 }),
23 ..Default::default()
24 };
25 let res = self.client.database_call(req).await?;
26 let desc = res
27 .create_database
28 .and_then(|x| x.desc)
29 .ok_or_else(|| Error::InvalidResponse)?;
30 Ok(Database::new(self.client.clone(), desc.id))
31 }
32
33 pub async fn lookup_database(&self, name: impl Into<String>) -> Result<Database> {
34 let desc = self.describe_database(name).await?;
35 Ok(Database::new(self.client.clone(), desc.id))
36 }
37
38 pub async fn describe_database(&self, name: impl Into<String>) -> Result<DatabaseDesc> {
39 let req = DatabaseRequest {
40 describe_database: Some(DescribeDatabaseRequest {
41 name: name.into(),
42 ..Default::default()
43 }),
44 ..Default::default()
45 };
46 let res = self.client.database_call(req).await?;
47 let desc = res
48 .describe_database
49 .and_then(|x| x.desc)
50 .ok_or_else(|| Error::InvalidResponse)?;
51 Ok(desc)
52 }
53}