tdm_server_rust/entity/
gray_release.rs1use chrono::{DateTime, Utc};
6use serde::{Deserialize, Serialize};
7use std::collections::BTreeMap;
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
11#[serde(rename_all = "camelCase")]
12pub struct GrayFeatureRecord {
13 pub feature_key: String,
15 pub feature_name: String,
17 pub description: String,
19 pub enabled: bool,
21 pub rollout_rate: i32,
23 pub tester_member_ids: Vec<i32>,
25 pub created_at: DateTime<Utc>,
27 pub updated_at: DateTime<Utc>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct GrayFeatureAdminItem {
35 pub feature_key: String,
37 pub feature_name: String,
39 pub description: String,
41 pub enabled: bool,
43 pub rollout_rate: i32,
45 pub tester_member_ids: Vec<i32>,
47 pub created_at: DateTime<Utc>,
49 pub updated_at: DateTime<Utc>,
51}
52
53impl From<GrayFeatureRecord> for GrayFeatureAdminItem {
54 fn from(value: GrayFeatureRecord) -> Self {
56 Self {
57 feature_key: value.feature_key,
58 feature_name: value.feature_name,
59 description: value.description,
60 enabled: value.enabled,
61 rollout_rate: value.rollout_rate,
62 tester_member_ids: value.tester_member_ids,
63 created_at: value.created_at,
64 updated_at: value.updated_at,
65 }
66 }
67}
68
69#[derive(Debug, Clone, Deserialize)]
71#[serde(rename_all = "camelCase")]
72pub struct GrayFeatureUpdateRequest {
73 pub feature_name: String,
75 pub description: String,
77 pub enabled: bool,
79 pub rollout_rate: i32,
81 #[serde(default)]
83 pub tester_member_ids: Vec<i32>,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize)]
88#[serde(rename_all = "camelCase")]
89pub struct GrayCurrentDecisionResponse {
90 pub features: BTreeMap<String, bool>,
92}
93
94#[derive(Debug, Clone, PartialEq, Eq)]
96pub struct GrayFeatureDecision {
97 pub enabled: bool,
99 pub bucket: Option<u32>,
101 pub reason: &'static str,
103}