Skip to main content

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}