llm_connector/protocols/common/
auth.rs1use std::collections::HashMap;
4
5#[derive(Clone, Debug)]
6pub enum AuthStrategy {
7 None,
8 Bearer {
9 api_key: String,
10 },
11 ApiKeyHeader {
12 api_key: String,
13 header_name: String,
14 },
15}
16
17#[derive(Clone, Debug, Default)]
18pub struct HeaderPolicy {
19 pub headers: Vec<(String, String)>,
20}
21
22#[derive(Clone, Debug, Default)]
23pub struct RequestMetadataPolicy {
24 pub header_overrides: HashMap<String, String>,
25}
26
27pub fn materialize_auth_headers(strategy: &AuthStrategy) -> Vec<(String, String)> {
28 match strategy {
29 AuthStrategy::None => vec![],
30 AuthStrategy::Bearer { api_key } => bearer_auth(api_key),
31 AuthStrategy::ApiKeyHeader {
32 api_key,
33 header_name,
34 } => api_key_header(api_key, header_name),
35 }
36}
37
38pub fn apply_header_policy(
39 mut headers: Vec<(String, String)>,
40 policy: &HeaderPolicy,
41) -> Vec<(String, String)> {
42 headers.extend(policy.headers.clone());
43 headers
44}
45
46pub fn merge_metadata_policies(
47 base: RequestMetadataPolicy,
48 extra: RequestMetadataPolicy,
49) -> RequestMetadataPolicy {
50 let mut merged = base.header_overrides;
51 merged.extend(extra.header_overrides);
52 RequestMetadataPolicy {
53 header_overrides: merged,
54 }
55}
56
57pub fn bearer_auth(api_key: &str) -> Vec<(String, String)> {
59 vec![
60 ("Authorization".to_string(), format!("Bearer {}", api_key)),
61 ("Content-Type".to_string(), "application/json".to_string()),
62 ]
63}
64
65pub fn api_key_header(api_key: &str, header_name: &str) -> Vec<(String, String)> {
67 vec![
68 (header_name.to_string(), api_key.to_string()),
69 ("Content-Type".to_string(), "application/json".to_string()),
70 ]
71}