opencode_sdk/types/
provider.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct ProviderListResponse {
12 #[serde(default)]
14 pub all: Vec<Provider>,
15 #[serde(default)]
17 pub default: HashMap<String, String>,
18 #[serde(default)]
20 pub connected: Vec<String>,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
25#[serde(rename_all = "lowercase")]
26pub enum ProviderSource {
27 Env,
29 Config,
31 Custom,
33 Api,
35 #[serde(other)]
37 Unknown,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42#[serde(rename_all = "camelCase")]
43pub struct Provider {
44 pub id: String,
46 pub name: String,
48 #[serde(default, skip_serializing_if = "Option::is_none")]
50 pub source: Option<ProviderSource>,
51 #[serde(default)]
53 pub env: Vec<String>,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub key: Option<String>,
57 #[serde(default)]
59 pub options: HashMap<String, serde_json::Value>,
60 #[serde(default)]
62 pub models: HashMap<String, Model>,
63 #[serde(flatten)]
65 pub extra: serde_json::Value,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
70#[serde(rename_all = "camelCase")]
71pub struct Model {
72 pub id: String,
74 #[serde(default, skip_serializing_if = "Option::is_none")]
76 pub name: Option<String>,
77 #[serde(default, skip_serializing_if = "Option::is_none")]
79 pub capabilities: Option<ModelCapabilities>,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
84#[serde(rename_all = "camelCase")]
85pub struct ModelCapabilities {
86 #[serde(default)]
88 pub tool_use: bool,
89 #[serde(default)]
91 pub vision: bool,
92 #[serde(default)]
94 pub thinking: bool,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
99#[serde(rename_all = "camelCase")]
100pub struct ProviderAuth {
101 pub provider_id: String,
103 pub method: AuthMethod,
105 #[serde(default)]
107 pub configured: bool,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize)]
112#[serde(tag = "type", rename_all = "kebab-case")]
113pub enum AuthMethod {
114 ApiKey {
116 #[serde(default, skip_serializing_if = "Option::is_none")]
118 env_var: Option<String>,
119 },
120 Oauth {
122 #[serde(default, skip_serializing_if = "Option::is_none")]
124 authorize_url: Option<String>,
125 },
126 None,
128 #[serde(other)]
130 Unknown,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize)]
135#[serde(rename_all = "camelCase")]
136pub struct SetAuthRequest {
137 pub key: String,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize)]
143#[serde(rename_all = "camelCase")]
144pub struct OAuthAuthorizeResponse {
145 pub url: String,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize)]
151#[serde(rename_all = "camelCase")]
152pub struct OAuthCallbackRequest {
153 pub code: String,
155 #[serde(default, skip_serializing_if = "Option::is_none")]
157 pub state: Option<String>,
158}