use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Query {
pub idea: String,
pub keywords: Vec<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Source {
CratesIo,
GitHub,
Npm,
PyPI,
HackerNews,
Go,
Maven,
RubyGems,
DockerHub,
VsCodeMarketplace,
NuGet,
}
impl std::fmt::Display for Source {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::CratesIo => f.write_str("crates.io"),
Self::GitHub => f.write_str("GitHub"),
Self::Npm => f.write_str("npm"),
Self::PyPI => f.write_str("PyPI"),
Self::HackerNews => f.write_str("Hacker News"),
Self::Go => f.write_str("Go"),
Self::Maven => f.write_str("Maven"),
Self::RubyGems => f.write_str("RubyGems"),
Self::DockerHub => f.write_str("Docker Hub"),
Self::VsCodeMarketplace => f.write_str("VS Code"),
Self::NuGet => f.write_str("NuGet"),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Match {
pub name: String,
pub source: Source,
pub url: String,
pub description: String,
pub popularity: Option<u64>,
pub similarity: f32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
pub enum Saturation {
Open,
Crowded,
Saturated,
}
impl std::fmt::Display for Saturation {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Open => f.write_str("Open"),
Self::Crowded => f.write_str("Crowded"),
Self::Saturated => f.write_str("Saturated"),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Verdict {
pub level: Saturation,
pub headline: String,
pub gaps: Vec<String>,
pub sources_checked: Vec<Source>,
#[serde(default)]
pub sources_failed: Vec<Source>,
pub caveat: String,
}