#![allow(dead_code)]
use std::pin::Pin;
use async_trait::async_trait;
use futures::Stream;
use crate::error::{Error, Result};
use crate::provider::{Provider, ProviderConfig};
use crate::types::{CompletionRequest, CompletionResponse, StreamChunk};
const CHATLAW_API_URL: &str = "https://api.chatlaw.ai/v1";
#[derive(Debug)]
pub struct ChatLawProvider {
config: ProviderConfig,
}
impl ChatLawProvider {
pub fn new(_config: ProviderConfig) -> Result<Self> {
Err(Error::config(
"ChatLAW API access requires partnership approval. Contact ChatLAW via chatlaw.ai",
))
}
pub fn from_env() -> Result<Self> {
Err(Error::config(
"ChatLAW API access requires partnership approval. Contact ChatLAW via chatlaw.ai",
))
}
pub fn with_api_key(_api_key: impl Into<String>) -> Result<Self> {
Err(Error::config(
"ChatLAW API access requires partnership approval. Contact ChatLAW via chatlaw.ai",
))
}
fn _api_url(&self) -> &str {
CHATLAW_API_URL
}
}
#[async_trait]
impl Provider for ChatLawProvider {
fn name(&self) -> &str {
"chatlaw"
}
async fn complete(&self, _request: CompletionRequest) -> Result<CompletionResponse> {
Err(Error::config(
"ChatLAW API access requires partnership approval. Contact ChatLAW via chatlaw.ai",
))
}
async fn complete_stream(
&self,
_request: CompletionRequest,
) -> Result<Pin<Box<dyn Stream<Item = Result<StreamChunk>> + Send>>> {
Err(Error::config(
"ChatLAW API access requires partnership approval. Contact ChatLAW via chatlaw.ai",
))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_chatlaw_requires_partnership() {
let config = ProviderConfig::new("test-key");
let result = ChatLawProvider::new(config);
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("partnership"));
}
#[test]
fn test_chatlaw_is_legal_domain() {
assert_eq!(CHATLAW_API_URL, "https://api.chatlaw.ai/v1");
}
#[test]
fn test_chatlaw_legal_specialization() {
}
}