Skip to main content

swarmhive_api_types/
channel.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use utoipa::ToSchema;
4use uuid::Uuid;
5
6/// Release channel selector value.
7///
8/// `Custom` carries an app-defined name (e.g. `nightly`, `enterprise-2025-q3`).
9/// This is the value type used where a channel is referenced by name; the
10/// channel *resource* is [`ChannelView`].
11#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, ToSchema)]
12#[serde(rename_all = "kebab-case")]
13pub enum Channel {
14    Dev,
15    Beta,
16    Stable,
17    Custom(String),
18}
19
20/// A channel resource under an app. A channel is a named pointer; the release
21/// it currently serves is tracked separately (see `channel_release`) and
22/// exposed via `GET /apps/:slug/channels/:name/release`.
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
24pub struct ChannelView {
25    pub id: Uuid,
26    pub app_id: Uuid,
27    pub name: String,
28    pub is_default: bool,
29    pub created_at: DateTime<Utc>,
30    pub updated_at: DateTime<Utc>,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
34pub struct CreateChannelRequest {
35    pub name: String,
36    #[serde(default)]
37    pub is_default: bool,
38}
39
40#[derive(Debug, Clone, Default, Serialize, Deserialize, ToSchema)]
41pub struct UpdateChannelRequest {
42    #[serde(default)]
43    pub name: Option<String>,
44    #[serde(default)]
45    pub is_default: Option<bool>,
46}