- `language_model` no longer depends on provider-specific crates such as `anthropic` and `open_ai` (inverted dependency) - `language_model_core` was extracted from `language_model` which contains the types for the provider-specific crates to convert to/from. - `gpui::SharedString` has been extracted into its own crate (still exposed by `gpui`), so `language_model_core` and provider API crates don't have to depend on `gpui`. - Removes some unnecessary `&'static str` | `SharedString` -> `String` -> `SharedString` conversions across the codebase. - Extracts the core logic of the cloud `LanguageModelProvider` into its own crate with simpler dependencies. Release Notes: - N/A --------- Co-authored-by: John Tur <john-tur@outlook.com>
110 lines
2.3 KiB
Rust
110 lines
2.3 KiB
Rust
use gpui_shared_string::SharedString;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use std::{
|
|
borrow::Borrow,
|
|
sync::atomic::{AtomicUsize, Ordering::SeqCst},
|
|
};
|
|
|
|
static NEXT_LANGUAGE_ID: AtomicUsize = AtomicUsize::new(0);
|
|
|
|
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)]
|
|
pub struct LanguageId(usize);
|
|
|
|
impl LanguageId {
|
|
pub fn new() -> Self {
|
|
Self(NEXT_LANGUAGE_ID.fetch_add(1, SeqCst))
|
|
}
|
|
}
|
|
|
|
impl Default for LanguageId {
|
|
fn default() -> Self {
|
|
Self::new()
|
|
}
|
|
}
|
|
|
|
#[derive(
|
|
Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, JsonSchema,
|
|
)]
|
|
pub struct LanguageName(pub SharedString);
|
|
|
|
impl LanguageName {
|
|
pub fn new(s: &str) -> Self {
|
|
Self(SharedString::new(s))
|
|
}
|
|
|
|
pub fn new_static(s: &'static str) -> Self {
|
|
Self(SharedString::new_static(s))
|
|
}
|
|
|
|
pub fn from_proto(s: String) -> Self {
|
|
Self(SharedString::from(s))
|
|
}
|
|
|
|
pub fn to_proto(&self) -> String {
|
|
self.0.to_string()
|
|
}
|
|
|
|
pub fn lsp_id(&self) -> String {
|
|
match self.0.as_ref() {
|
|
"Plain Text" => "plaintext".to_string(),
|
|
language_name => language_name.to_lowercase(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<LanguageName> for SharedString {
|
|
fn from(value: LanguageName) -> Self {
|
|
value.0
|
|
}
|
|
}
|
|
|
|
impl From<SharedString> for LanguageName {
|
|
fn from(value: SharedString) -> Self {
|
|
LanguageName(value)
|
|
}
|
|
}
|
|
|
|
impl AsRef<str> for LanguageName {
|
|
fn as_ref(&self) -> &str {
|
|
self.0.as_ref()
|
|
}
|
|
}
|
|
|
|
impl Borrow<str> for LanguageName {
|
|
fn borrow(&self) -> &str {
|
|
self.0.as_ref()
|
|
}
|
|
}
|
|
|
|
impl PartialEq<str> for LanguageName {
|
|
fn eq(&self, other: &str) -> bool {
|
|
self.0.as_ref() == other
|
|
}
|
|
}
|
|
|
|
impl PartialEq<&str> for LanguageName {
|
|
fn eq(&self, other: &&str) -> bool {
|
|
self.0.as_ref() == *other
|
|
}
|
|
}
|
|
|
|
impl std::fmt::Display for LanguageName {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
|
write!(f, "{}", self.0)
|
|
}
|
|
}
|
|
|
|
impl From<&'static str> for LanguageName {
|
|
fn from(str: &'static str) -> Self {
|
|
Self(SharedString::new_static(str))
|
|
}
|
|
}
|
|
|
|
impl From<LanguageName> for String {
|
|
fn from(value: LanguageName) -> Self {
|
|
let value: &str = &value.0;
|
|
Self::from(value)
|
|
}
|
|
}
|