rust_cnb/
knowledge_base.rs1use crate::error::{ApiError, Result};
4use reqwest::Client;
5use serde_json::Value;
6use url::Url;
7
8pub struct KnowledgeBaseClient {
10 base_url: String,
11 client: Client,
12}
13
14impl KnowledgeBaseClient {
15 pub fn new(base_url: String, client: Client) -> Self {
17 Self { base_url, client }
18 }
19
20 pub fn with_auth(self, token: &str) -> Self {
22 self
24 }
25
26 pub async fn get_repo_knowledge_embedding_models(
28 &self,
29 repo: String,
30 ) -> Result<Value> {
31 let path = format!("/{}/-/knowledge/embedding/models", repo);
32 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
33
34
35 let request = self.client.request(
36 reqwest::Method::GET,
37 url
38 );
39
40
41
42
43 let response = request.send().await?;
44
45 if response.status().is_success() {
46 let json: Value = response.json().await?;
47 Ok(json)
48 } else {
49 Err(ApiError::HttpError(response.status().as_u16()))
50 }
51 }
52
53 pub async fn post_repo_knowledge_base_query(
55 &self,
56 repo: String,
57 query: serde_json::Value,
58 ) -> Result<Value> {
59 let path = format!("/{}/-/knowledge/base/query", repo);
60 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
61
62
63
64 let mut request = self.client.request(
65 reqwest::Method::POST,
66 url
67 );
68
69
70
71 request = request.json(&query);
72
73 let response = request.send().await?;
74
75 if response.status().is_success() {
76 let json: Value = response.json().await?;
77 Ok(json)
78 } else {
79 Err(ApiError::HttpError(response.status().as_u16()))
80 }
81 }
82
83 pub async fn get_repo_knowledge_base(
85 &self,
86 repo: String,
87 ) -> Result<Value> {
88 let path = format!("/{}/-/knowledge/base", repo);
89 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
90
91
92 let request = self.client.request(
93 reqwest::Method::GET,
94 url
95 );
96
97
98
99
100 let response = request.send().await?;
101
102 if response.status().is_success() {
103 let json: Value = response.json().await?;
104 Ok(json)
105 } else {
106 Err(ApiError::HttpError(response.status().as_u16()))
107 }
108 }
109
110 pub async fn delete_repo_knowledge_base(
112 &self,
113 repo: String,
114 ) -> Result<Value> {
115 let path = format!("/{}/-/knowledge/base", repo);
116 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
117
118
119 let request = self.client.request(
120 reqwest::Method::DELETE,
121 url
122 );
123
124
125
126
127 let response = request.send().await?;
128
129 if response.status().is_success() {
130 let json: Value = response.json().await?;
131 Ok(json)
132 } else {
133 Err(ApiError::HttpError(response.status().as_u16()))
134 }
135 }
136
137}