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::tool_result::ToolResultArtifact;
20use super::video::VideoArtifact;
21
22#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
23#[serde(rename_all = "lowercase")]
24pub enum ArtifactType {
25    Text,
26    Table,
27    Chart,
28    Form,
29    Dashboard,
30    #[serde(rename = "presentation_card")]
31    PresentationCard,
32    List,
33    #[serde(rename = "copy_paste_text")]
34    CopyPasteText,
35    Image,
36    Video,
37    Audio,
38    Message,
39    #[serde(rename = "tool_result")]
40    ToolResult,
41    #[serde(untagged)]
42    Custom(String),
43}
44
45impl std::fmt::Display for ArtifactType {
46    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47        match self {
48            Self::Text => write!(f, "{}", TextArtifact::ARTIFACT_TYPE_STR),
49            Self::Table => write!(f, "{}", TableArtifact::ARTIFACT_TYPE_STR),
50            Self::Chart => write!(f, "{}", ChartArtifact::ARTIFACT_TYPE_STR),
51            Self::Form => write!(f, "form"),
52            Self::Dashboard => write!(f, "{}", DashboardArtifact::ARTIFACT_TYPE_STR),
53            Self::PresentationCard => write!(f, "{}", PresentationCardArtifact::ARTIFACT_TYPE_STR),
54            Self::List => write!(f, "{}", ListArtifact::ARTIFACT_TYPE_STR),
55            Self::CopyPasteText => write!(f, "{}", CopyPasteTextArtifact::ARTIFACT_TYPE_STR),
56            Self::Image => write!(f, "{}", ImageArtifact::ARTIFACT_TYPE_STR),
57            Self::Video => write!(f, "{}", VideoArtifact::ARTIFACT_TYPE_STR),
58            Self::Audio => write!(f, "{}", AudioArtifact::ARTIFACT_TYPE_STR),
59            Self::Message => write!(f, "{}", MessageArtifact::ARTIFACT_TYPE_STR),
60            Self::ToolResult => write!(f, "{}", ToolResultArtifact::ARTIFACT_TYPE_STR),
61            Self::Custom(s) => write!(f, "{}", s),
62        }
63    }
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
67#[serde(rename_all = "lowercase")]
68pub enum ColumnType {
69    String,
70    Integer,
71    Number,
72    Currency,
73    Percentage,
74    Date,
75    Boolean,
76    Link,
77}
78
79#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
80#[serde(rename_all = "lowercase")]
81pub enum ChartType {
82    #[default]
83    Line,
84    Bar,
85    Pie,
86    Doughnut,
87    Area,
88}
89
90#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
91#[serde(rename_all = "lowercase")]
92pub enum AxisType {
93    Category,
94    #[default]
95    Linear,
96    Logarithmic,
97    Time,
98}
99
100#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
101#[serde(rename_all = "lowercase")]
102pub enum SortOrder {
103    Asc,
104    Desc,
105}
106
107#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
108#[serde(rename_all = "lowercase")]
109pub enum Alignment {
110    Left,
111    Center,
112    Right,
113}