Skip to main content

claude_api/blocking/
messages.rs

1//! Synchronous Messages namespace.
2
3use crate::error::Result;
4use crate::messages::request::{CountTokensRequest, CreateMessageRequest};
5use crate::messages::response::{CountTokensResponse, Message};
6
7use super::Client;
8
9/// Namespace handle for the Messages API (sync).
10///
11/// Obtained via [`Client::messages`].
12pub struct Messages<'a> {
13    client: &'a Client,
14}
15
16impl<'a> Messages<'a> {
17    pub(crate) fn new(client: &'a Client) -> Self {
18        Self { client }
19    }
20
21    /// `POST /v1/messages`. Retries are governed by the client's
22    /// [`RetryPolicy`](crate::retry::RetryPolicy).
23    pub fn create(&self, request: CreateMessageRequest) -> Result<Message> {
24        self.create_with_beta(request, &[])
25    }
26
27    /// Like [`Self::create`] but with per-request beta headers.
28    // By-value matches the async signature; the closure only borrows.
29    #[allow(clippy::needless_pass_by_value)]
30    pub fn create_with_beta(
31        &self,
32        request: CreateMessageRequest,
33        betas: &[&str],
34    ) -> Result<Message> {
35        let request_ref = &request;
36        self.client.execute_with_retry(
37            || {
38                self.client
39                    .request_builder(reqwest::Method::POST, "/v1/messages")
40                    .json(request_ref)
41            },
42            betas,
43        )
44    }
45
46    /// `POST /v1/messages/count_tokens`.
47    pub fn count_tokens(&self, request: CountTokensRequest) -> Result<CountTokensResponse> {
48        self.count_tokens_with_beta(request, &[])
49    }
50
51    /// Like [`Self::count_tokens`] but with per-request beta headers.
52    #[allow(clippy::needless_pass_by_value)]
53    pub fn count_tokens_with_beta(
54        &self,
55        request: CountTokensRequest,
56        betas: &[&str],
57    ) -> Result<CountTokensResponse> {
58        let request_ref = &request;
59        self.client.execute_with_retry(
60            || {
61                self.client
62                    .request_builder(reqwest::Method::POST, "/v1/messages/count_tokens")
63                    .json(request_ref)
64            },
65            betas,
66        )
67    }
68}