Skip to main content

systemprompt_models/artifacts/
types.rs

1//! `ArtifactType` enum for typed MCP artifacts.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use schemars::JsonSchema;
7use serde::{Deserialize, Serialize};
8
9use super::audio::AudioArtifact;
10use super::card::PresentationCardArtifact;
11use super::chart::ChartArtifact;
12use super::copy_paste_text::CopyPasteTextArtifact;
13use super::dashboard::DashboardArtifact;
14use super::image::ImageArtifact;
15use super::list::ListArtifact;
16use super::message::MessageArtifact;
17use super::table::TableArtifact;
18use super::text::TextArtifact;
19use super::video::VideoArtifact;
20
21#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
22#[serde(rename_all = "lowercase")]
23pub enum ArtifactType {
24    Text,
25    Table,
26    Chart,
27    Form,
28    Dashboard,
29    #[serde(rename = "presentation_card")]
30    PresentationCard,
31    List,
32    #[serde(rename = "copy_paste_text")]
33    CopyPasteText,
34    Image,
35    Video,
36    Audio,
37    Message,
38    #[serde(untagged)]
39    Custom(String),
40}
41
42impl std::fmt::Display for ArtifactType {
43    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44        match self {
45            Self::Text => write!(f, "{}", TextArtifact::ARTIFACT_TYPE_STR),
46            Self::Table => write!(f, "{}", TableArtifact::ARTIFACT_TYPE_STR),
47            Self::Chart => write!(f, "{}", ChartArtifact::ARTIFACT_TYPE_STR),
48            Self::Form => write!(f, "form"),
49            Self::Dashboard => write!(f, "{}", DashboardArtifact::ARTIFACT_TYPE_STR),
50            Self::PresentationCard => write!(f, "{}", PresentationCardArtifact::ARTIFACT_TYPE_STR),
51            Self::List => write!(f, "{}", ListArtifact::ARTIFACT_TYPE_STR),
52            Self::CopyPasteText => write!(f, "{}", CopyPasteTextArtifact::ARTIFACT_TYPE_STR),
53            Self::Image => write!(f, "{}", ImageArtifact::ARTIFACT_TYPE_STR),
54            Self::Video => write!(f, "{}", VideoArtifact::ARTIFACT_TYPE_STR),
55            Self::Audio => write!(f, "{}", AudioArtifact::ARTIFACT_TYPE_STR),
56            Self::Message => write!(f, "{}", MessageArtifact::ARTIFACT_TYPE_STR),
57            Self::Custom(s) => write!(f, "{}", s),
58        }
59    }
60}
61
62#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
63#[serde(rename_all = "lowercase")]
64pub enum ColumnType {
65    String,
66    Integer,
67    Number,
68    Currency,
69    Percentage,
70    Date,
71    Boolean,
72    Link,
73}
74
75#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
76#[serde(rename_all = "lowercase")]
77pub enum ChartType {
78    #[default]
79    Line,
80    Bar,
81    Pie,
82    Doughnut,
83    Area,
84}
85
86#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
87#[serde(rename_all = "lowercase")]
88pub enum AxisType {
89    Category,
90    #[default]
91    Linear,
92    Logarithmic,
93    Time,
94}
95
96#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
97#[serde(rename_all = "lowercase")]
98pub enum SortOrder {
99    Asc,
100    Desc,
101}
102
103#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
104#[serde(rename_all = "lowercase")]
105pub enum Alignment {
106    Left,
107    Center,
108    Right,
109}