omcp 0.1.1

Utility functions
Documentation
use std::str::FromStr;

use reqwest::header::{HeaderMap, HeaderName, HeaderValue};

use crate::{
    client::{io::OMcpClient, sse::SseClient, types::OMcpServerType},
    error::Result,
};

pub struct OMcpClientBuilder {
    pub url: String,
    pub server_type: OMcpServerType,
    pub headers: HeaderMap,
}

impl OMcpClientBuilder {
    pub fn new<U>(url: U, server_type: OMcpServerType) -> Self
    where
        U: AsRef<str>,
    {
        Self {
            url: url.as_ref().into(),
            server_type,
            headers: HeaderMap::new(),
        }
    }

    pub fn with_bearer<S>(self, bearer: S) -> Result<Self>
    where
        S: AsRef<str>,
    {
        let bearer_value = format!("Bearer {}", bearer.as_ref());
        self.with_header("Authorization", bearer_value)
    }

    pub fn with_header<K, V>(mut self, key: K, value: V) -> Result<Self>
    where
        K: AsRef<str>,
        V: AsRef<str>,
    {
        let key = HeaderName::from_str(key.as_ref())?;
        let value = HeaderValue::from_str(value.as_ref())?;
        self.headers.insert(key, value);
        Ok(self)
    }

    pub fn build(self) -> OMcpClient {
        match self.server_type {
            OMcpServerType::Sse => {
                let sse = SseClient::from_builder(self);
                OMcpClient::Sse(sse)
            }
        }
    }
}