google_developers_knowledge_v1/client.rs
1// Copyright 2026 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14//
15// Code generated by sidekick. DO NOT EDIT.
16#![allow(rustdoc::bare_urls)]
17#![allow(rustdoc::broken_intra_doc_links)]
18#![allow(rustdoc::invalid_html_tags)]
19#![allow(rustdoc::redundant_explicit_links)]
20
21/// Implements a client for the Developer Knowledge API.
22///
23/// # Example
24/// ```
25/// # use google_developers_knowledge_v1::client::DeveloperKnowledge;
26/// async fn sample(
27/// document_id: &str,
28/// ) -> anyhow::Result<()> {
29/// let client = DeveloperKnowledge::builder().build().await?;
30/// let response = client.get_document()
31/// .set_name(format!("documents/{document_id}"))
32/// .send().await?;
33/// println!("response {:?}", response);
34/// Ok(())
35/// }
36/// ```
37///
38/// # Service Description
39///
40/// The Developer Knowledge API provides programmatic access to Google's public
41/// developer documentation, enabling you to integrate this knowledge base into
42/// your own applications and workflows.
43///
44/// The API is designed to be the canonical source for machine-readable access to
45/// Google's developer documentation.
46///
47/// A typical use case is to first use
48/// [DeveloperKnowledge.SearchDocumentChunks][google.developers.knowledge.v1.DeveloperKnowledge.SearchDocumentChunks]
49/// to find relevant document chunks based on a query, and then use
50/// [DeveloperKnowledge.GetDocument][google.developers.knowledge.v1.DeveloperKnowledge.GetDocument]
51/// or
52/// [DeveloperKnowledge.BatchGetDocuments][google.developers.knowledge.v1.DeveloperKnowledge.BatchGetDocuments]
53/// with document resource names (such as
54/// [DocumentChunk.parent][google.developers.knowledge.v1.DocumentChunk.parent]
55/// or `documents/{uri_without_scheme}`) to fetch the full content of the top
56/// results.
57///
58/// All document content is provided in Markdown format.
59///
60/// [google.developers.knowledge.v1.DeveloperKnowledge.BatchGetDocuments]: crate::client::DeveloperKnowledge::batch_get_documents
61/// [google.developers.knowledge.v1.DeveloperKnowledge.GetDocument]: crate::client::DeveloperKnowledge::get_document
62/// [google.developers.knowledge.v1.DeveloperKnowledge.SearchDocumentChunks]: crate::client::DeveloperKnowledge::search_document_chunks
63/// [google.developers.knowledge.v1.DocumentChunk.parent]: crate::model::DocumentChunk::parent
64///
65/// # Configuration
66///
67/// To configure `DeveloperKnowledge` use the `with_*` methods in the type returned
68/// by [builder()][DeveloperKnowledge::builder]. The default configuration should
69/// work for most applications. Common configuration changes include
70///
71/// * [with_endpoint()]: by default this client uses the global default endpoint
72/// (`https://developerknowledge.googleapis.com`). Applications using regional
73/// endpoints or running in restricted networks (e.g. a network configured
74/// with [Private Google Access with VPC Service Controls]) may want to
75/// override this default.
76/// * [with_credentials()]: by default this client uses
77/// [Application Default Credentials]. Applications using custom
78/// authentication may need to override this default.
79///
80/// [with_endpoint()]: super::builder::developer_knowledge::ClientBuilder::with_endpoint
81/// [with_credentials()]: super::builder::developer_knowledge::ClientBuilder::with_credentials
82/// [Private Google Access with VPC Service Controls]: https://cloud.google.com/vpc-service-controls/docs/private-connectivity
83/// [Application Default Credentials]: https://cloud.google.com/docs/authentication#adc
84///
85/// # Pooling and Cloning
86///
87/// `DeveloperKnowledge` holds a connection pool internally, it is advised to
88/// create one and reuse it. You do not need to wrap `DeveloperKnowledge` in
89/// an [Rc](std::rc::Rc) or [Arc](std::sync::Arc) to reuse it, because it
90/// already uses an `Arc` internally.
91#[derive(Clone, Debug)]
92pub struct DeveloperKnowledge {
93 inner: std::sync::Arc<dyn super::stub::dynamic::DeveloperKnowledge>,
94}
95
96impl DeveloperKnowledge {
97 /// Returns a builder for [DeveloperKnowledge].
98 ///
99 /// ```
100 /// # async fn sample() -> google_cloud_gax::client_builder::Result<()> {
101 /// # use google_developers_knowledge_v1::client::DeveloperKnowledge;
102 /// let client = DeveloperKnowledge::builder().build().await?;
103 /// # Ok(()) }
104 /// ```
105 pub fn builder() -> super::builder::developer_knowledge::ClientBuilder {
106 crate::new_client_builder(super::builder::developer_knowledge::client::Factory)
107 }
108
109 /// Creates a new client from the provided stub.
110 ///
111 /// The most common case for calling this function is in tests mocking the
112 /// client's behavior.
113 pub fn from_stub<T>(stub: impl Into<std::sync::Arc<T>>) -> Self
114 where
115 T: super::stub::DeveloperKnowledge + 'static,
116 {
117 Self { inner: stub.into() }
118 }
119
120 pub(crate) async fn new(
121 config: gaxi::options::ClientConfig,
122 ) -> crate::ClientBuilderResult<Self> {
123 let inner = Self::build_inner(config).await?;
124 Ok(Self { inner })
125 }
126
127 async fn build_inner(
128 conf: gaxi::options::ClientConfig,
129 ) -> crate::ClientBuilderResult<std::sync::Arc<dyn super::stub::dynamic::DeveloperKnowledge>>
130 {
131 if gaxi::options::tracing_enabled(&conf) {
132 return Ok(std::sync::Arc::new(Self::build_with_tracing(conf).await?));
133 }
134 Ok(std::sync::Arc::new(Self::build_transport(conf).await?))
135 }
136
137 async fn build_transport(
138 conf: gaxi::options::ClientConfig,
139 ) -> crate::ClientBuilderResult<impl super::stub::DeveloperKnowledge> {
140 super::transport::DeveloperKnowledge::new(conf).await
141 }
142
143 async fn build_with_tracing(
144 conf: gaxi::options::ClientConfig,
145 ) -> crate::ClientBuilderResult<impl super::stub::DeveloperKnowledge> {
146 Self::build_transport(conf)
147 .await
148 .map(super::tracing::DeveloperKnowledge::new)
149 }
150
151 /// Searches for developer knowledge across Google's developer documentation.
152 /// Returns [DocumentChunk][google.developers.knowledge.v1.DocumentChunk]s
153 /// based on the user's query. There may be many chunks from the same
154 /// [Document][google.developers.knowledge.v1.Document]. To retrieve full
155 /// documents, use
156 /// [DeveloperKnowledge.GetDocument][google.developers.knowledge.v1.DeveloperKnowledge.GetDocument]
157 /// or
158 /// [DeveloperKnowledge.BatchGetDocuments][google.developers.knowledge.v1.DeveloperKnowledge.BatchGetDocuments]
159 /// with the
160 /// [DocumentChunk.parent][google.developers.knowledge.v1.DocumentChunk.parent]
161 /// returned in the
162 /// [SearchDocumentChunksResponse.results][google.developers.knowledge.v1.SearchDocumentChunksResponse.results].
163 ///
164 /// [google.developers.knowledge.v1.DeveloperKnowledge.BatchGetDocuments]: crate::client::DeveloperKnowledge::batch_get_documents
165 /// [google.developers.knowledge.v1.DeveloperKnowledge.GetDocument]: crate::client::DeveloperKnowledge::get_document
166 /// [google.developers.knowledge.v1.Document]: crate::model::Document
167 /// [google.developers.knowledge.v1.DocumentChunk]: crate::model::DocumentChunk
168 /// [google.developers.knowledge.v1.DocumentChunk.parent]: crate::model::DocumentChunk::parent
169 /// [google.developers.knowledge.v1.SearchDocumentChunksResponse.results]: crate::model::SearchDocumentChunksResponse::results
170 ///
171 /// # Example
172 /// ```
173 /// # use google_developers_knowledge_v1::client::DeveloperKnowledge;
174 /// use google_cloud_gax::paginator::ItemPaginator as _;
175 /// use google_developers_knowledge_v1::Result;
176 /// async fn sample(
177 /// client: &DeveloperKnowledge
178 /// ) -> Result<()> {
179 /// let mut list = client.search_document_chunks()
180 /// /* set fields */
181 /// .by_item();
182 /// while let Some(item) = list.next().await.transpose()? {
183 /// println!("{:?}", item);
184 /// }
185 /// Ok(())
186 /// }
187 /// ```
188 pub fn search_document_chunks(
189 &self,
190 ) -> super::builder::developer_knowledge::SearchDocumentChunks {
191 super::builder::developer_knowledge::SearchDocumentChunks::new(self.inner.clone())
192 }
193
194 /// Retrieves a single document with its full Markdown content.
195 ///
196 /// # Example
197 /// ```
198 /// # use google_developers_knowledge_v1::client::DeveloperKnowledge;
199 /// use google_developers_knowledge_v1::Result;
200 /// async fn sample(
201 /// client: &DeveloperKnowledge, document_id: &str
202 /// ) -> Result<()> {
203 /// let response = client.get_document()
204 /// .set_name(format!("documents/{document_id}"))
205 /// .send().await?;
206 /// println!("response {:?}", response);
207 /// Ok(())
208 /// }
209 /// ```
210 pub fn get_document(&self) -> super::builder::developer_knowledge::GetDocument {
211 super::builder::developer_knowledge::GetDocument::new(self.inner.clone())
212 }
213
214 /// Retrieves multiple documents, each with its full Markdown content.
215 ///
216 /// # Example
217 /// ```
218 /// # use google_developers_knowledge_v1::client::DeveloperKnowledge;
219 /// use google_developers_knowledge_v1::Result;
220 /// async fn sample(
221 /// client: &DeveloperKnowledge
222 /// ) -> Result<()> {
223 /// let response = client.batch_get_documents()
224 /// /* set fields */
225 /// .send().await?;
226 /// println!("response {:?}", response);
227 /// Ok(())
228 /// }
229 /// ```
230 pub fn batch_get_documents(&self) -> super::builder::developer_knowledge::BatchGetDocuments {
231 super::builder::developer_knowledge::BatchGetDocuments::new(self.inner.clone())
232 }
233
234 /// Answers a query using grounded generation.
235 ///
236 /// # Example
237 /// ```
238 /// # use google_developers_knowledge_v1::client::DeveloperKnowledge;
239 /// use google_developers_knowledge_v1::Result;
240 /// async fn sample(
241 /// client: &DeveloperKnowledge
242 /// ) -> Result<()> {
243 /// let response = client.answer_query()
244 /// /* set fields */
245 /// .send().await?;
246 /// println!("response {:?}", response);
247 /// Ok(())
248 /// }
249 /// ```
250 pub fn answer_query(&self) -> super::builder::developer_knowledge::AnswerQuery {
251 super::builder::developer_knowledge::AnswerQuery::new(self.inner.clone())
252 }
253}