claude_api/messages/
thinking.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
12#[serde(tag = "type", rename_all = "snake_case")]
13#[non_exhaustive]
14pub enum ThinkingConfig {
15 Enabled {
17 budget_tokens: u32,
19 },
20 Disabled,
22}
23
24impl ThinkingConfig {
25 #[must_use]
27 pub fn enabled(budget_tokens: u32) -> Self {
28 Self::Enabled { budget_tokens }
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35 use pretty_assertions::assert_eq;
36 use serde_json::json;
37
38 #[test]
39 fn enabled_round_trips() {
40 let c = ThinkingConfig::enabled(8192);
41 let v = serde_json::to_value(c).unwrap();
42 assert_eq!(v, json!({"type": "enabled", "budget_tokens": 8192}));
43 let parsed: ThinkingConfig = serde_json::from_value(v).unwrap();
44 assert_eq!(parsed, c);
45 }
46
47 #[test]
48 fn disabled_round_trips() {
49 let c = ThinkingConfig::Disabled;
50 let v = serde_json::to_value(c).unwrap();
51 assert_eq!(v, json!({"type": "disabled"}));
52 let parsed: ThinkingConfig = serde_json::from_value(v).unwrap();
53 assert_eq!(parsed, c);
54 }
55}