Skip to main content

fiberplane_models/
integrations.rs

1use crate::timestamps::Timestamp;
2#[cfg(feature = "fp-bindgen")]
3use fp_bindgen::prelude::Serializable;
4use serde::{Deserialize, Serialize};
5use strum_macros::{Display, EnumIter};
6use typed_builder::TypedBuilder;
7
8#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize, TypedBuilder)]
9#[cfg_attr(
10    feature = "fp-bindgen",
11    derive(Serializable),
12    fp(rust_module = "fiberplane_models::integrations")
13)]
14#[non_exhaustive]
15#[serde(rename_all = "camelCase")]
16pub struct PersonalIntegrationSummary {
17    pub id: PersonalIntegrationId,
18    pub status: IntegrationStatus,
19
20    #[builder(default, setter(into))]
21    #[serde(default, skip_serializing_if = "Option::is_none")]
22    pub created_at: Option<Timestamp>,
23    #[builder(default, setter(into))]
24    #[serde(default, skip_serializing_if = "Option::is_none")]
25    pub updated_at: Option<Timestamp>,
26}
27
28#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Eq, Serialize, Display, EnumIter)]
29#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
30#[cfg_attr(
31    feature = "fp-bindgen",
32    derive(Serializable),
33    fp(rust_module = "fiberplane_models::integrations")
34)]
35#[non_exhaustive]
36#[serde(rename_all = "lowercase")]
37pub enum PersonalIntegrationId {
38    GitHub,
39}
40
41#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize, TypedBuilder)]
42#[cfg_attr(
43    feature = "fp-bindgen",
44    derive(Serializable),
45    fp(rust_module = "fiberplane_models::integrations")
46)]
47#[non_exhaustive]
48#[serde(rename_all = "camelCase")]
49pub struct WorkspaceIntegrationSummary {
50    pub id: WorkspaceIntegrationId,
51    pub status: IntegrationStatus,
52
53    #[builder(default, setter(into))]
54    #[serde(default, skip_serializing_if = "Option::is_none")]
55    pub created_at: Option<Timestamp>,
56    #[builder(default, setter(into))]
57    #[serde(default, skip_serializing_if = "Option::is_none")]
58    pub updated_at: Option<Timestamp>,
59}
60
61#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Eq, Serialize, Display, EnumIter)]
62#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
63#[cfg_attr(
64    feature = "fp-bindgen",
65    derive(Serializable),
66    fp(rust_module = "fiberplane_models::integrations")
67)]
68#[non_exhaustive]
69#[serde(rename_all = "lowercase")]
70pub enum WorkspaceIntegrationId {
71    PagerDutyWebhook,
72}
73
74#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize, Display, EnumIter)]
75#[cfg_attr(
76    feature = "fp-bindgen",
77    derive(Serializable),
78    fp(rust_module = "fiberplane_models::integrations")
79)]
80#[non_exhaustive]
81#[serde(rename_all = "snake_case", tag = "type")]
82pub enum IntegrationStatus {
83    Connected,
84    Disconnected,
85    AttentionRequired { reason: String },
86}