This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new b6497782 deploy: dc349284a4204c1a56af47fb3177ace6f9e899a0
b6497782 is described below

commit b6497782f2da4756868069d7a11e0528c51f1604
Author: liurenjie1024 <[email protected]>
AuthorDate: Mon Sep 29 11:01:53 2025 +0000

    deploy: dc349284a4204c1a56af47fb3177ace6f9e899a0
---
 api/src/iceberg_catalog_rest/client.rs.html | 208 ++++++++++++++--------------
 1 file changed, 102 insertions(+), 106 deletions(-)

diff --git a/api/src/iceberg_catalog_rest/client.rs.html 
b/api/src/iceberg_catalog_rest/client.rs.html
index 06a2e308..b96158db 100644
--- a/api/src/iceberg_catalog_rest/client.rs.html
+++ b/api/src/iceberg_catalog_rest/client.rs.html
@@ -193,111 +193,107 @@
 <a href=#193 id=193 data-nosnippet>193</a>        <span 
class="prelude-val">Ok</span>(())
 <a href=#194 id=194 data-nosnippet>194</a>    }
 <a href=#195 id=195 data-nosnippet>195</a>
-<a href=#196 id=196 data-nosnippet>196</a>    <span class="doccomment">/// 
Authenticate the request by filling token.
+<a href=#196 id=196 data-nosnippet>196</a>    <span class="doccomment">/// 
Authenticates the request by adding a bearer token to the authorization header.
 <a href=#197 id=197 data-nosnippet>197</a>    ///
-<a href=#198 id=198 data-nosnippet>198</a>    /// - If neither token nor 
credential is provided, this method will do nothing.
-<a href=#199 id=199 data-nosnippet>199</a>    /// - If only credential is 
provided, this method will try to fetch token from the server.
-<a href=#200 id=200 data-nosnippet>200</a>    /// - If token is provided, this 
method will use the token directly.
-<a href=#201 id=201 data-nosnippet>201</a>    ///
-<a href=#202 id=202 data-nosnippet>202</a>    /// # TODO
+<a href=#198 id=198 data-nosnippet>198</a>    /// This method supports three 
authentication modes:
+<a href=#199 id=199 data-nosnippet>199</a>    ///
+<a href=#200 id=200 data-nosnippet>200</a>    /// 1. **No authentication** - 
Skip authentication when both `credential` and `token` are missing.
+<a href=#201 id=201 data-nosnippet>201</a>    /// 2. **Token authentication** 
- Use the provided `token` directly for authentication.
+<a href=#202 id=202 data-nosnippet>202</a>    /// 3. **OAuth authentication** 
- Exchange `credential` for a token, cache it, then use it for authentication.
 <a href=#203 id=203 data-nosnippet>203</a>    ///
-<a href=#204 id=204 data-nosnippet>204</a>    /// Support refreshing token 
while needed.
-<a href=#205 id=205 data-nosnippet>205</a>    </span><span class="kw">async fn 
</span>authenticate(<span class="kw-2">&amp;</span><span 
class="self">self</span>, req: <span class="kw-2">&amp;mut </span>Request) 
-&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-<a href=#206 id=206 data-nosnippet>206</a>        <span class="comment">// 
Clone the token from lock without holding the lock for entire function.
-<a href=#207 id=207 data-nosnippet>207</a>        </span><span class="kw">let 
</span>token = <span class="self">self</span>.token.lock().<span 
class="kw">await</span>.clone();
-<a href=#208 id=208 data-nosnippet>208</a>
-<a href=#209 id=209 data-nosnippet>209</a>        <span class="kw">if 
</span><span class="self">self</span>.credential.is_none() &amp;&amp; 
token.is_none() {
-<a href=#210 id=210 data-nosnippet>210</a>            <span class="kw">return 
</span><span class="prelude-val">Ok</span>(());
-<a href=#211 id=211 data-nosnippet>211</a>        }
-<a href=#212 id=212 data-nosnippet>212</a>
-<a href=#213 id=213 data-nosnippet>213</a>        <span class="comment">// Use 
token if provided.
-<a href=#214 id=214 data-nosnippet>214</a>        </span><span class="kw">if 
let </span><span class="prelude-val">Some</span>(token) = <span 
class="kw-2">&amp;</span>token {
-<a href=#215 id=215 data-nosnippet>215</a>            req.headers_mut().insert(
-<a href=#216 id=216 data-nosnippet>216</a>                
http::header::AUTHORIZATION,
-<a href=#217 id=217 data-nosnippet>217</a>                <span 
class="macro">format!</span>(<span class="string">"Bearer 
{token}"</span>).parse().map_err(|e| {
-<a href=#218 id=218 data-nosnippet>218</a>                    Error::new(
-<a href=#219 id=219 data-nosnippet>219</a>                        
ErrorKind::DataInvalid,
-<a href=#220 id=220 data-nosnippet>220</a>                        <span 
class="string">"Invalid token received from catalog server!"</span>,
-<a href=#221 id=221 data-nosnippet>221</a>                    )
-<a href=#222 id=222 data-nosnippet>222</a>                    .with_source(e)
-<a href=#223 id=223 data-nosnippet>223</a>                })<span 
class="question-mark">?</span>,
-<a href=#224 id=224 data-nosnippet>224</a>            );
-<a href=#225 id=225 data-nosnippet>225</a>            <span class="kw">return 
</span><span class="prelude-val">Ok</span>(());
-<a href=#226 id=226 data-nosnippet>226</a>        }
-<a href=#227 id=227 data-nosnippet>227</a>
-<a href=#228 id=228 data-nosnippet>228</a>        <span class="kw">let 
</span>token = <span 
class="self">self</span>.exchange_credential_for_token().<span 
class="kw">await</span><span class="question-mark">?</span>;
-<a href=#229 id=229 data-nosnippet>229</a>        <span class="comment">// 
Update token.
-<a href=#230 id=230 data-nosnippet>230</a>        </span><span 
class="kw-2">*</span><span class="self">self</span>.token.lock().<span 
class="kw">await </span>= <span class="prelude-val">Some</span>(token.clone());
-<a href=#231 id=231 data-nosnippet>231</a>        <span class="comment">// 
Insert token in request.
-<a href=#232 id=232 data-nosnippet>232</a>        
</span>req.headers_mut().insert(
-<a href=#233 id=233 data-nosnippet>233</a>            
http::header::AUTHORIZATION,
-<a href=#234 id=234 data-nosnippet>234</a>            <span 
class="macro">format!</span>(<span class="string">"Bearer 
{token}"</span>).parse().map_err(|e| {
-<a href=#235 id=235 data-nosnippet>235</a>                Error::new(
-<a href=#236 id=236 data-nosnippet>236</a>                    
ErrorKind::DataInvalid,
-<a href=#237 id=237 data-nosnippet>237</a>                    <span 
class="string">"Invalid token received from catalog server!"</span>,
-<a href=#238 id=238 data-nosnippet>238</a>                )
-<a href=#239 id=239 data-nosnippet>239</a>                .with_source(e)
-<a href=#240 id=240 data-nosnippet>240</a>            })<span 
class="question-mark">?</span>,
-<a href=#241 id=241 data-nosnippet>241</a>        );
-<a href=#242 id=242 data-nosnippet>242</a>
-<a href=#243 id=243 data-nosnippet>243</a>        <span 
class="prelude-val">Ok</span>(())
-<a href=#244 id=244 data-nosnippet>244</a>    }
-<a href=#245 id=245 data-nosnippet>245</a>
-<a href=#246 id=246 data-nosnippet>246</a>    <span class="attr">#[inline]
-<a href=#247 id=247 data-nosnippet>247</a>    </span><span class="kw">pub fn 
</span>request&lt;U: IntoUrl&gt;(<span class="kw-2">&amp;</span><span 
class="self">self</span>, method: Method, url: U) -&gt; RequestBuilder {
-<a href=#248 id=248 data-nosnippet>248</a>        <span 
class="self">self</span>.client
-<a href=#249 id=249 data-nosnippet>249</a>            .request(method, url)
-<a href=#250 id=250 data-nosnippet>250</a>            .headers(<span 
class="self">self</span>.extra_headers.clone())
-<a href=#251 id=251 data-nosnippet>251</a>    }
-<a href=#252 id=252 data-nosnippet>252</a>
-<a href=#253 id=253 data-nosnippet>253</a>    <span class="doccomment">/// 
Executes the given `Request` and returns a `Response`.
-<a href=#254 id=254 data-nosnippet>254</a>    </span><span class="kw">pub 
async fn </span>execute(<span class="kw-2">&amp;</span><span 
class="self">self</span>, <span class="kw-2">mut </span>request: Request) -&gt; 
<span class="prelude-ty">Result</span>&lt;Response&gt; {
-<a href=#255 id=255 data-nosnippet>255</a>        
request.headers_mut().extend(<span 
class="self">self</span>.extra_headers.clone());
-<a href=#256 id=256 data-nosnippet>256</a>        <span 
class="prelude-val">Ok</span>(<span 
class="self">self</span>.client.execute(request).<span 
class="kw">await</span><span class="question-mark">?</span>)
-<a href=#257 id=257 data-nosnippet>257</a>    }
-<a href=#258 id=258 data-nosnippet>258</a>
-<a href=#259 id=259 data-nosnippet>259</a>    <span class="comment">// Queries 
the Iceberg REST catalog after authentication with the given `Request` and
-<a href=#260 id=260 data-nosnippet>260</a>    // returns a `Response`.
-<a href=#261 id=261 data-nosnippet>261</a>    </span><span class="kw">pub 
async fn </span>query_catalog(<span class="kw-2">&amp;</span><span 
class="self">self</span>, <span class="kw-2">mut </span>request: Request) -&gt; 
<span class="prelude-ty">Result</span>&lt;Response&gt; {
-<a href=#262 id=262 data-nosnippet>262</a>        <span 
class="self">self</span>.authenticate(<span class="kw-2">&amp;mut 
</span>request).<span class="kw">await</span><span 
class="question-mark">?</span>;
-<a href=#263 id=263 data-nosnippet>263</a>        <span 
class="self">self</span>.execute(request).<span class="kw">await
-<a href=#264 id=264 data-nosnippet>264</a>    </span>}
-<a href=#265 id=265 data-nosnippet>265</a>}
-<a href=#266 id=266 data-nosnippet>266</a>
-<a href=#267 id=267 data-nosnippet>267</a><span class="doccomment">/// 
Deserializes a catalog response into the given [`DeserializedOwned`] type.
-<a href=#268 id=268 data-nosnippet>268</a>///
-<a href=#269 id=269 data-nosnippet>269</a>/// Returns an error if unable to 
parse the response bytes.
-<a href=#270 id=270 data-nosnippet>270</a></span><span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">async fn 
</span>deserialize_catalog_response&lt;R: DeserializeOwned&gt;(
-<a href=#271 id=271 data-nosnippet>271</a>    response: Response,
-<a href=#272 id=272 data-nosnippet>272</a>) -&gt; <span 
class="prelude-ty">Result</span>&lt;R&gt; {
-<a href=#273 id=273 data-nosnippet>273</a>    <span class="kw">let 
</span>bytes = response.bytes().<span class="kw">await</span><span 
class="question-mark">?</span>;
-<a href=#274 id=274 data-nosnippet>274</a>
-<a href=#275 id=275 data-nosnippet>275</a>    
serde_json::from_slice::&lt;R&gt;(<span 
class="kw-2">&amp;</span>bytes).map_err(|e| {
-<a href=#276 id=276 data-nosnippet>276</a>        Error::new(
-<a href=#277 id=277 data-nosnippet>277</a>            ErrorKind::Unexpected,
-<a href=#278 id=278 data-nosnippet>278</a>            <span 
class="string">"Failed to parse response from rest catalog server"</span>,
-<a href=#279 id=279 data-nosnippet>279</a>        )
-<a href=#280 id=280 data-nosnippet>280</a>        .with_context(<span 
class="string">"json"</span>, String::from_utf8_lossy(<span 
class="kw-2">&amp;</span>bytes))
-<a href=#281 id=281 data-nosnippet>281</a>        .with_source(e)
-<a href=#282 id=282 data-nosnippet>282</a>    })
-<a href=#283 id=283 data-nosnippet>283</a>}
-<a href=#284 id=284 data-nosnippet>284</a>
-<a href=#285 id=285 data-nosnippet>285</a><span class="doccomment">/// 
Deserializes a unexpected catalog response into an error.
-<a href=#286 id=286 data-nosnippet>286</a></span><span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">async fn 
</span>deserialize_unexpected_catalog_error(response: Response) -&gt; Error {
-<a href=#287 id=287 data-nosnippet>287</a>    <span class="kw">let </span>err 
= Error::new(
-<a href=#288 id=288 data-nosnippet>288</a>        ErrorKind::Unexpected,
-<a href=#289 id=289 data-nosnippet>289</a>        <span 
class="string">"Received response with unexpected status code"</span>,
-<a href=#290 id=290 data-nosnippet>290</a>    )
-<a href=#291 id=291 data-nosnippet>291</a>    .with_context(<span 
class="string">"status"</span>, response.status().to_string())
-<a href=#292 id=292 data-nosnippet>292</a>    .with_context(<span 
class="string">"headers"</span>, <span class="macro">format!</span>(<span 
class="string">"{:?}"</span>, response.headers()));
-<a href=#293 id=293 data-nosnippet>293</a>
-<a href=#294 id=294 data-nosnippet>294</a>    <span class="kw">let 
</span>bytes = <span class="kw">match </span>response.bytes().<span 
class="kw">await </span>{
-<a href=#295 id=295 data-nosnippet>295</a>        <span 
class="prelude-val">Ok</span>(bytes) =&gt; bytes,
-<a href=#296 id=296 data-nosnippet>296</a>        <span 
class="prelude-val">Err</span>(err) =&gt; <span class="kw">return 
</span>err.into(),
-<a href=#297 id=297 data-nosnippet>297</a>    };
-<a href=#298 id=298 data-nosnippet>298</a>
-<a href=#299 id=299 data-nosnippet>299</a>    <span class="kw">if 
</span>bytes.is_empty() {
-<a href=#300 id=300 data-nosnippet>300</a>        <span class="kw">return 
</span>err;
-<a href=#301 id=301 data-nosnippet>301</a>    }
-<a href=#302 id=302 data-nosnippet>302</a>    err.with_context(<span 
class="string">"json"</span>, String::from_utf8_lossy(<span 
class="kw-2">&amp;</span>bytes))
-<a href=#303 id=303 
data-nosnippet>303</a>}</code></pre></div></section></main></body></html>
\ No newline at end of file
+<a href=#204 id=204 data-nosnippet>204</a>    /// When both `credential` and 
`token` are present, `token` takes precedence.
+<a href=#205 id=205 data-nosnippet>205</a>    ///
+<a href=#206 id=206 data-nosnippet>206</a>    /// # TODO: Support automatic 
token refreshing.
+<a href=#207 id=207 data-nosnippet>207</a>    </span><span class="kw">async fn 
</span>authenticate(<span class="kw-2">&amp;</span><span 
class="self">self</span>, req: <span class="kw-2">&amp;mut </span>Request) 
-&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#208 id=208 data-nosnippet>208</a>        <span class="comment">// 
Clone the token from lock without holding the lock for entire function.
+<a href=#209 id=209 data-nosnippet>209</a>        </span><span class="kw">let 
</span>token = <span class="self">self</span>.token.lock().<span 
class="kw">await</span>.clone();
+<a href=#210 id=210 data-nosnippet>210</a>
+<a href=#211 id=211 data-nosnippet>211</a>        <span class="kw">if 
</span><span class="self">self</span>.credential.is_none() &amp;&amp; 
token.is_none() {
+<a href=#212 id=212 data-nosnippet>212</a>            <span class="kw">return 
</span><span class="prelude-val">Ok</span>(());
+<a href=#213 id=213 data-nosnippet>213</a>        }
+<a href=#214 id=214 data-nosnippet>214</a>
+<a href=#215 id=215 data-nosnippet>215</a>        <span class="comment">// 
Either use the provided token or exchange credential for token, cache and use 
that
+<a href=#216 id=216 data-nosnippet>216</a>        </span><span class="kw">let 
</span>token = <span class="kw">match </span>token {
+<a href=#217 id=217 data-nosnippet>217</a>            <span 
class="prelude-val">Some</span>(token) =&gt; token,
+<a href=#218 id=218 data-nosnippet>218</a>            <span 
class="prelude-val">None </span>=&gt; {
+<a href=#219 id=219 data-nosnippet>219</a>                <span class="kw">let 
</span>token = <span 
class="self">self</span>.exchange_credential_for_token().<span 
class="kw">await</span><span class="question-mark">?</span>;
+<a href=#220 id=220 data-nosnippet>220</a>                <span 
class="comment">// Update token so that we use it for next request instead of
+<a href=#221 id=221 data-nosnippet>221</a>                // exchanging 
credential for token from the server again
+<a href=#222 id=222 data-nosnippet>222</a>                </span><span 
class="kw-2">*</span><span class="self">self</span>.token.lock().<span 
class="kw">await </span>= <span class="prelude-val">Some</span>(token.clone());
+<a href=#223 id=223 data-nosnippet>223</a>                token
+<a href=#224 id=224 data-nosnippet>224</a>            }
+<a href=#225 id=225 data-nosnippet>225</a>        };
+<a href=#226 id=226 data-nosnippet>226</a>
+<a href=#227 id=227 data-nosnippet>227</a>        <span class="comment">// 
Insert token in request.
+<a href=#228 id=228 data-nosnippet>228</a>        
</span>req.headers_mut().insert(
+<a href=#229 id=229 data-nosnippet>229</a>            
http::header::AUTHORIZATION,
+<a href=#230 id=230 data-nosnippet>230</a>            <span 
class="macro">format!</span>(<span class="string">"Bearer 
{token}"</span>).parse().map_err(|e| {
+<a href=#231 id=231 data-nosnippet>231</a>                Error::new(
+<a href=#232 id=232 data-nosnippet>232</a>                    
ErrorKind::DataInvalid,
+<a href=#233 id=233 data-nosnippet>233</a>                    <span 
class="string">"Invalid token received from catalog server!"</span>,
+<a href=#234 id=234 data-nosnippet>234</a>                )
+<a href=#235 id=235 data-nosnippet>235</a>                .with_source(e)
+<a href=#236 id=236 data-nosnippet>236</a>            })<span 
class="question-mark">?</span>,
+<a href=#237 id=237 data-nosnippet>237</a>        );
+<a href=#238 id=238 data-nosnippet>238</a>
+<a href=#239 id=239 data-nosnippet>239</a>        <span 
class="prelude-val">Ok</span>(())
+<a href=#240 id=240 data-nosnippet>240</a>    }
+<a href=#241 id=241 data-nosnippet>241</a>
+<a href=#242 id=242 data-nosnippet>242</a>    <span class="attr">#[inline]
+<a href=#243 id=243 data-nosnippet>243</a>    </span><span class="kw">pub fn 
</span>request&lt;U: IntoUrl&gt;(<span class="kw-2">&amp;</span><span 
class="self">self</span>, method: Method, url: U) -&gt; RequestBuilder {
+<a href=#244 id=244 data-nosnippet>244</a>        <span 
class="self">self</span>.client
+<a href=#245 id=245 data-nosnippet>245</a>            .request(method, url)
+<a href=#246 id=246 data-nosnippet>246</a>            .headers(<span 
class="self">self</span>.extra_headers.clone())
+<a href=#247 id=247 data-nosnippet>247</a>    }
+<a href=#248 id=248 data-nosnippet>248</a>
+<a href=#249 id=249 data-nosnippet>249</a>    <span class="doccomment">/// 
Executes the given `Request` and returns a `Response`.
+<a href=#250 id=250 data-nosnippet>250</a>    </span><span class="kw">pub 
async fn </span>execute(<span class="kw-2">&amp;</span><span 
class="self">self</span>, <span class="kw-2">mut </span>request: Request) -&gt; 
<span class="prelude-ty">Result</span>&lt;Response&gt; {
+<a href=#251 id=251 data-nosnippet>251</a>        
request.headers_mut().extend(<span 
class="self">self</span>.extra_headers.clone());
+<a href=#252 id=252 data-nosnippet>252</a>        <span 
class="prelude-val">Ok</span>(<span 
class="self">self</span>.client.execute(request).<span 
class="kw">await</span><span class="question-mark">?</span>)
+<a href=#253 id=253 data-nosnippet>253</a>    }
+<a href=#254 id=254 data-nosnippet>254</a>
+<a href=#255 id=255 data-nosnippet>255</a>    <span class="comment">// Queries 
the Iceberg REST catalog after authentication with the given `Request` and
+<a href=#256 id=256 data-nosnippet>256</a>    // returns a `Response`.
+<a href=#257 id=257 data-nosnippet>257</a>    </span><span class="kw">pub 
async fn </span>query_catalog(<span class="kw-2">&amp;</span><span 
class="self">self</span>, <span class="kw-2">mut </span>request: Request) -&gt; 
<span class="prelude-ty">Result</span>&lt;Response&gt; {
+<a href=#258 id=258 data-nosnippet>258</a>        <span 
class="self">self</span>.authenticate(<span class="kw-2">&amp;mut 
</span>request).<span class="kw">await</span><span 
class="question-mark">?</span>;
+<a href=#259 id=259 data-nosnippet>259</a>        <span 
class="self">self</span>.execute(request).<span class="kw">await
+<a href=#260 id=260 data-nosnippet>260</a>    </span>}
+<a href=#261 id=261 data-nosnippet>261</a>}
+<a href=#262 id=262 data-nosnippet>262</a>
+<a href=#263 id=263 data-nosnippet>263</a><span class="doccomment">/// 
Deserializes a catalog response into the given [`DeserializedOwned`] type.
+<a href=#264 id=264 data-nosnippet>264</a>///
+<a href=#265 id=265 data-nosnippet>265</a>/// Returns an error if unable to 
parse the response bytes.
+<a href=#266 id=266 data-nosnippet>266</a></span><span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">async fn 
</span>deserialize_catalog_response&lt;R: DeserializeOwned&gt;(
+<a href=#267 id=267 data-nosnippet>267</a>    response: Response,
+<a href=#268 id=268 data-nosnippet>268</a>) -&gt; <span 
class="prelude-ty">Result</span>&lt;R&gt; {
+<a href=#269 id=269 data-nosnippet>269</a>    <span class="kw">let 
</span>bytes = response.bytes().<span class="kw">await</span><span 
class="question-mark">?</span>;
+<a href=#270 id=270 data-nosnippet>270</a>
+<a href=#271 id=271 data-nosnippet>271</a>    
serde_json::from_slice::&lt;R&gt;(<span 
class="kw-2">&amp;</span>bytes).map_err(|e| {
+<a href=#272 id=272 data-nosnippet>272</a>        Error::new(
+<a href=#273 id=273 data-nosnippet>273</a>            ErrorKind::Unexpected,
+<a href=#274 id=274 data-nosnippet>274</a>            <span 
class="string">"Failed to parse response from rest catalog server"</span>,
+<a href=#275 id=275 data-nosnippet>275</a>        )
+<a href=#276 id=276 data-nosnippet>276</a>        .with_context(<span 
class="string">"json"</span>, String::from_utf8_lossy(<span 
class="kw-2">&amp;</span>bytes))
+<a href=#277 id=277 data-nosnippet>277</a>        .with_source(e)
+<a href=#278 id=278 data-nosnippet>278</a>    })
+<a href=#279 id=279 data-nosnippet>279</a>}
+<a href=#280 id=280 data-nosnippet>280</a>
+<a href=#281 id=281 data-nosnippet>281</a><span class="doccomment">/// 
Deserializes a unexpected catalog response into an error.
+<a href=#282 id=282 data-nosnippet>282</a></span><span 
class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">async fn 
</span>deserialize_unexpected_catalog_error(response: Response) -&gt; Error {
+<a href=#283 id=283 data-nosnippet>283</a>    <span class="kw">let </span>err 
= Error::new(
+<a href=#284 id=284 data-nosnippet>284</a>        ErrorKind::Unexpected,
+<a href=#285 id=285 data-nosnippet>285</a>        <span 
class="string">"Received response with unexpected status code"</span>,
+<a href=#286 id=286 data-nosnippet>286</a>    )
+<a href=#287 id=287 data-nosnippet>287</a>    .with_context(<span 
class="string">"status"</span>, response.status().to_string())
+<a href=#288 id=288 data-nosnippet>288</a>    .with_context(<span 
class="string">"headers"</span>, <span class="macro">format!</span>(<span 
class="string">"{:?}"</span>, response.headers()));
+<a href=#289 id=289 data-nosnippet>289</a>
+<a href=#290 id=290 data-nosnippet>290</a>    <span class="kw">let 
</span>bytes = <span class="kw">match </span>response.bytes().<span 
class="kw">await </span>{
+<a href=#291 id=291 data-nosnippet>291</a>        <span 
class="prelude-val">Ok</span>(bytes) =&gt; bytes,
+<a href=#292 id=292 data-nosnippet>292</a>        <span 
class="prelude-val">Err</span>(err) =&gt; <span class="kw">return 
</span>err.into(),
+<a href=#293 id=293 data-nosnippet>293</a>    };
+<a href=#294 id=294 data-nosnippet>294</a>
+<a href=#295 id=295 data-nosnippet>295</a>    <span class="kw">if 
</span>bytes.is_empty() {
+<a href=#296 id=296 data-nosnippet>296</a>        <span class="kw">return 
</span>err;
+<a href=#297 id=297 data-nosnippet>297</a>    }
+<a href=#298 id=298 data-nosnippet>298</a>    err.with_context(<span 
class="string">"json"</span>, String::from_utf8_lossy(<span 
class="kw-2">&amp;</span>bytes))
+<a href=#299 id=299 
data-nosnippet>299</a>}</code></pre></div></section></main></body></html>
\ No newline at end of file

Reply via email to