diff --git a/CLAUDE.md b/CLAUDE.md index a9ad96a..0f1fb80 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -118,6 +118,8 @@ All crates use `version = "0.0.0"` in their Cargo.toml — this is intentional. Never manually set version numbers in Cargo.toml files. To release, create a GitHub Release with a semver tag like `v0.1.0` (via the GitHub UI or `gh release create v0.1.0 --generate-notes`). +**Always check the current version before reasoning about version bumps.** The `0.0.0` placeholder in Cargo.toml is a dev sentinel, not the real version. Run `gh release list --limit 5` to see the actual most recent release, then decide the next tag. Don't assume "pre-1.0" or guess from stale context — the project has shipped past 1.0 and is subject to normal semver rules (breaking changes → major bump, new features → minor, fixes → patch). If a PR introduces a breaking change, call out in the PR description which major version the next release should be (current_major + 1). + ## Issue tracking Issue tracking for lineark development happens in GitHub Issues, not in Linear. Use `gh issue` commands to view, create, and manage issues. diff --git a/crates/lineark-codegen/src/dep_graph.rs b/crates/lineark-codegen/src/dep_graph.rs new file mode 100644 index 0000000..4edc217 --- /dev/null +++ b/crates/lineark-codegen/src/dep_graph.rs @@ -0,0 +1,115 @@ +//! Schema dependency-graph utilities. +//! +//! Used by codegen to decide where `Box` is actually required on +//! Object / InputObject fields. The high-level rule: +//! +//! For a field `Container.f: Target` (a direct, non-list reference to another +//! Object/InputObject), `Box` is needed iff `Target` can transitively +//! reach `Container` in the schema's reference graph — that's exactly the +//! shape that would otherwise produce an infinite-size Rust struct. +//! +//! Edges through lists are *excluded* from the graph: `Vec` is already a +//! heap pointer with a fixed stack size, so it breaks any size cycle. + +use std::collections::{HashMap, HashSet}; + +/// For each node in `edges`, compute the set of nodes reachable from it +/// (transitively, including the node itself if there's a cycle back to it). +pub fn reachability(edges: &HashMap>) -> HashMap> { + let mut result = HashMap::with_capacity(edges.len()); + for start in edges.keys() { + result.insert(start.clone(), reachable_from(start, edges)); + } + result +} + +fn reachable_from(start: &str, edges: &HashMap>) -> HashSet { + let mut visited: HashSet = HashSet::new(); + let mut stack: Vec = match edges.get(start) { + Some(succs) => succs.clone(), + None => Vec::new(), + }; + while let Some(node) = stack.pop() { + if !visited.insert(node.clone()) { + continue; + } + if let Some(succs) = edges.get(&node) { + for s in succs { + if !visited.contains(s) { + stack.push(s.clone()); + } + } + } + } + visited +} + +/// Returns true iff `target` can reach `container` in the graph — i.e., +/// embedding `target` directly inside `container` would form a size cycle. +pub fn reaches(target: &str, container: &str, reach: &HashMap>) -> bool { + reach.get(target).is_some_and(|r| r.contains(container)) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn graph(pairs: &[(&str, &[&str])]) -> HashMap> { + pairs + .iter() + .map(|(k, vs)| (k.to_string(), vs.iter().map(|s| s.to_string()).collect())) + .collect() + } + + #[test] + fn empty_graph_has_no_reach() { + let g = graph(&[]); + assert!(reachability(&g).is_empty()); + } + + #[test] + fn linear_chain_reach_forward_only() { + let g = graph(&[("A", &["B"]), ("B", &["C"]), ("C", &[])]); + let r = reachability(&g); + assert!(reaches("A", "B", &r)); + assert!(reaches("A", "C", &r)); + assert!(reaches("B", "C", &r)); + assert!(!reaches("B", "A", &r)); + assert!(!reaches("C", "A", &r)); + // No cycles → no node reaches itself. + assert!(!reaches("A", "A", &r)); + } + + #[test] + fn self_loop_reaches_itself() { + let g = graph(&[("A", &["A"])]); + let r = reachability(&g); + assert!(reaches("A", "A", &r)); + } + + #[test] + fn mutual_recursion_both_reach_each_other() { + let g = graph(&[("A", &["B"]), ("B", &["A"])]); + let r = reachability(&g); + assert!(reaches("A", "B", &r)); + assert!(reaches("B", "A", &r)); + assert!(reaches("A", "A", &r)); + assert!(reaches("B", "B", &r)); + } + + #[test] + fn cycle_not_involving_node_does_not_reach_it() { + // A → B → C → B (B,C in cycle; A is upstream and not part of it) + let g = graph(&[("A", &["B"]), ("B", &["C"]), ("C", &["B"])]); + let r = reachability(&g); + assert!(reaches("A", "B", &r)); + assert!(reaches("A", "C", &r)); + // B and C reach each other and themselves, but not A. + assert!(reaches("B", "C", &r)); + assert!(reaches("C", "B", &r)); + assert!(reaches("B", "B", &r)); + assert!(reaches("C", "C", &r)); + assert!(!reaches("B", "A", &r)); + assert!(!reaches("C", "A", &r)); + } +} diff --git a/crates/lineark-codegen/src/emit_inputs.rs b/crates/lineark-codegen/src/emit_inputs.rs index 7b4cdbc..103ed6c 100644 --- a/crates/lineark-codegen/src/emit_inputs.rs +++ b/crates/lineark-codegen/src/emit_inputs.rs @@ -1,15 +1,19 @@ +use crate::dep_graph::{self, reaches}; use crate::emit_scalars::graphql_type_to_rust; -use crate::parser::{self, GqlType, InputDef, TypeKind}; +use crate::parser::{self, FieldDef, GqlType, InputDef, TypeKind}; use heck::ToSnakeCase; use proc_macro2::TokenStream; use quote::quote; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; pub fn emit(inputs: &[InputDef], type_kind_map: &HashMap) -> TokenStream { + let defaultable = compute_defaultable_inputs(inputs, type_kind_map); + let reach = compute_input_reachability(inputs, type_kind_map); + let structs: Vec = inputs .iter() .filter(|i| !i.name.is_empty()) - .map(|i| emit_input_struct(i, type_kind_map)) + .map(|i| emit_input_struct(i, type_kind_map, &defaultable, &reach)) .collect(); quote! { @@ -19,12 +23,114 @@ pub fn emit(inputs: &[InputDef], type_kind_map: &HashMap) -> T use serde::{Deserialize, Serialize}; use super::enums::*; + use crate::field_update::MaybeUndefined; #(#structs)* } } -fn emit_input_struct(input: &InputDef, type_kind_map: &HashMap) -> TokenStream { +/// Build the InputObject dependency graph (edges through direct, non-list +/// references only) and compute transitive reachability. Used to decide +/// per-field whether `Box` is needed for size correctness. +fn compute_input_reachability( + inputs: &[InputDef], + type_kind_map: &HashMap, +) -> HashMap> { + let mut edges: HashMap> = HashMap::with_capacity(inputs.len()); + for input in inputs { + if input.name.is_empty() { + continue; + } + // Dedupe: multiple fields can target the same InputObject, and duplicate + // edges would just expand the DFS stack without changing reachability. + let mut deps: HashSet = HashSet::new(); + for field in &input.fields { + if let Some(target) = direct_input_target(&field.ty, type_kind_map) { + deps.insert(target.to_string()); + } + } + edges.insert(input.name.clone(), deps.into_iter().collect()); + } + dep_graph::reachability(&edges) +} + +/// If `ty` is a direct (non-list) reference to an InputObject, return that +/// type's name. Lists return `None` because `Vec` is sized and breaks +/// size cycles regardless of `T`. +fn direct_input_target<'a>( + ty: &'a GqlType, + type_kind_map: &HashMap, +) -> Option<&'a str> { + match ty { + GqlType::NonNull(inner) => direct_input_target(inner, type_kind_map), + GqlType::Named(name) => { + if matches!( + type_kind_map.get(name.as_str()), + Some(TypeKind::InputObject) + ) { + Some(name.as_str()) + } else { + None + } + } + GqlType::List(_) => None, + } +} + +/// Compute which input structs can still derive `Default`. +/// +/// Required (non-null) fields now emit as plain `T` instead of `Option`, so +/// the struct only derives `Default` if every required field's Rust type also +/// has `Default`. Generated enums don't derive `Default`, and mutually recursive +/// input objects need a fixed-point pass to converge. +fn compute_defaultable_inputs( + inputs: &[InputDef], + type_kind_map: &HashMap, +) -> HashSet { + let mut defaultable: HashSet = inputs.iter().map(|i| i.name.clone()).collect(); + loop { + let snapshot = defaultable.clone(); + defaultable.retain(|name| { + let Some(input) = inputs.iter().find(|i| i.name == *name) else { + return true; + }; + input.fields.iter().all(|f| { + // Nullable fields always have Default (MaybeUndefined::Undefined). + if !matches!(f.ty, GqlType::NonNull(_)) { + return true; + } + type_has_default(&f.ty, type_kind_map, &snapshot) + }) + }); + if defaultable.len() == snapshot.len() { + break; + } + } + defaultable +} + +fn type_has_default( + ty: &GqlType, + type_kind_map: &HashMap, + defaultable_inputs: &HashSet, +) -> bool { + match ty { + GqlType::NonNull(inner) => type_has_default(inner, type_kind_map, defaultable_inputs), + GqlType::List(_) => true, + GqlType::Named(name) => match type_kind_map.get(name.as_str()) { + Some(TypeKind::Enum) => false, + Some(TypeKind::InputObject) => defaultable_inputs.contains(name), + _ => true, + }, + } +} + +fn emit_input_struct( + input: &InputDef, + type_kind_map: &HashMap, + defaultable: &HashSet, + reach: &HashMap>, +) -> TokenStream { let name = quote::format_ident!("{}", input.name); let doc = parser::doc_comment_tokens(&input.description); @@ -39,50 +145,27 @@ fn emit_input_struct(input: &InputDef, type_kind_map: &HashMap let base = f.ty.base_name(); matches!( type_kind_map.get(base), - Some(TypeKind::Scalar) | Some(TypeKind::Enum) | Some(TypeKind::InputObject) - | Some(TypeKind::Union) | Some(TypeKind::Interface) | Some(TypeKind::Object) + Some(TypeKind::Scalar) + | Some(TypeKind::Enum) + | Some(TypeKind::InputObject) + | Some(TypeKind::Union) + | Some(TypeKind::Interface) + | Some(TypeKind::Object) | None ) }) - .map(|f| { - let field_name_str = f.name.to_snake_case(); - let original_name = &f.name; - let safe_name = parser::safe_ident(&field_name_str); - let field_ident = if safe_name.starts_with("r#") { - let raw: TokenStream = safe_name.parse().unwrap(); - raw - } else { - let ident = quote::format_ident!("{}", safe_name); - quote! { #ident } - }; - let rust_type = resolve_input_type(&f.ty, type_kind_map); - let fdoc = parser::doc_comment_tokens(&f.description); - // If the snake_case name differs from the original camelCase, add serde rename. - // We use rename_all on the struct level, so individual renames are only needed - // if to_snake_case -> to_camelCase roundtrip doesn't match. - let needs_rename = { - let roundtrip = heck::AsLowerCamelCase(&field_name_str).to_string(); - roundtrip != *original_name - }; - if needs_rename { - quote! { - #fdoc - #[serde(rename = #original_name, default, skip_serializing_if = "Option::is_none")] - pub #field_ident: #rust_type, - } - } else { - quote! { - #fdoc - #[serde(default, skip_serializing_if = "Option::is_none")] - pub #field_ident: #rust_type, - } - } - }) + .map(|f| emit_field(f, type_kind_map, &input.name, reach)) .collect(); + let derives = if defaultable.contains(&input.name) { + quote! { #[derive(Debug, Clone, Default, Serialize, Deserialize)] } + } else { + quote! { #[derive(Debug, Clone, Serialize, Deserialize)] } + }; + quote! { #doc - #[derive(Debug, Clone, Default, Serialize, Deserialize)] + #derives #[serde(rename_all = "camelCase")] pub struct #name { #(#fields)* @@ -90,34 +173,418 @@ fn emit_input_struct(input: &InputDef, type_kind_map: &HashMap } } -/// All input fields are `Option` for easy Default derivation and the `..Default::default()` pattern. -fn resolve_input_type(ty: &GqlType, type_kind_map: &HashMap) -> TokenStream { - let inner = resolve_inner(ty, type_kind_map); - quote! { Option<#inner> } +fn emit_field( + f: &FieldDef, + type_kind_map: &HashMap, + container: &str, + reach: &HashMap>, +) -> TokenStream { + let field_name_str = f.name.to_snake_case(); + let original_name = &f.name; + let safe_name = parser::safe_ident(&field_name_str); + let field_ident = if safe_name.starts_with("r#") { + let raw: TokenStream = safe_name.parse().unwrap(); + raw + } else { + let ident = quote::format_ident!("{}", safe_name); + quote! { #ident } + }; + + let is_required = matches!(f.ty, GqlType::NonNull(_)); + let rust_type = resolve_input_type(&f.ty, type_kind_map, container, reach); + let fdoc = parser::doc_comment_tokens(&f.description); + // If the snake_case name differs from the original camelCase, add serde rename. + // We use rename_all on the struct level, so individual renames are only needed + // if to_snake_case -> to_camelCase roundtrip doesn't match. + let needs_rename = { + let roundtrip = heck::AsLowerCamelCase(&field_name_str).to_string(); + roundtrip != *original_name + }; + + // Required fields are always serialized; nullable fields use MaybeUndefined's + // skip predicate so `Undefined` omits the field from the JSON payload. + let serde_attr = match (needs_rename, is_required) { + (true, true) => quote! { #[serde(rename = #original_name)] }, + (false, true) => quote! {}, + (true, false) => quote! { + #[serde(rename = #original_name, default, skip_serializing_if = "MaybeUndefined::is_undefined")] + }, + (false, false) => quote! { + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + }, + }; + + quote! { + #fdoc + #serde_attr + pub #field_ident: #rust_type, + } +} + +/// Resolve a GraphQL input field type into its emitted Rust tokens. +/// +/// Walks the type tree and applies nullability uniformly: +/// +/// - At the **outermost** position, nullable wraps in `MaybeUndefined` so +/// the consumer can distinguish "omit this field" from "send explicit null". +/// - **Inside a list**, nullable wraps in `Option` — GraphQL list slots are +/// always materialized (no "omit this slot" wire form), so the three-state +/// distinction is meaningless one level in. +/// - Required positions emit plain `T` at any depth. +/// +/// `Box` is added to a direct InputObject reference only when the field +/// would otherwise create an infinite-size struct: at depth 0 (where the +/// containing wrapper is `MaybeUndefined<_>` or plain `T`, both of which need +/// `T` to be sized) and the target can transitively reach `container` in the +/// schema's reference graph. Non-cyclic references and references inside lists +/// (where `Vec` already breaks the size cycle) drop the `Box` entirely. +/// +/// This handles every shape the GraphQL spec allows (`T`, `T!`, `[T!]!`, +/// `[T!]`, `[T]!`, `[T]`, and arbitrarily nested lists like `[[T!]!]!`) +/// without special-casing the schema. +fn resolve_input_type( + ty: &GqlType, + type_kind_map: &HashMap, + container: &str, + reach: &HashMap>, +) -> TokenStream { + resolve(ty, type_kind_map, /* depth = */ 0, container, reach) } -fn resolve_inner(ty: &GqlType, type_kind_map: &HashMap) -> TokenStream { +fn resolve( + ty: &GqlType, + type_kind_map: &HashMap, + depth: usize, + container: &str, + reach: &HashMap>, +) -> TokenStream { + match ty { + GqlType::NonNull(inner) => resolve_required(inner, type_kind_map, depth, container, reach), + other => { + let inner = resolve_required(other, type_kind_map, depth, container, reach); + if depth == 0 { + quote! { MaybeUndefined<#inner> } + } else { + quote! { Option<#inner> } + } + } + } +} + +fn resolve_required( + ty: &GqlType, + type_kind_map: &HashMap, + depth: usize, + container: &str, + reach: &HashMap>, +) -> TokenStream { match ty { GqlType::Named(name) => { let kind = type_kind_map.get(name.as_str()); if matches!(kind, Some(TypeKind::InputObject)) { let ident = quote::format_ident!("{}", name); - // Self-reference: input types reference other input types in the same module. - quote! { Box<#ident> } + // Box only when depth == 0 (above us is `MaybeUndefined<_>` or + // plain `T`, both needing sized T) AND the target can reach the + // containing struct (true size cycle). Inside a list, Vec breaks + // the cycle on its own and Box is unnecessary. + let needs_box = depth == 0 && reaches(name, container, reach); + if needs_box { + quote! { Box<#ident> } + } else { + quote! { #ident } + } } else if matches!( kind, Some(TypeKind::Union) | Some(TypeKind::Interface) | Some(TypeKind::Object) ) { - // Union/interface/object types in inputs are serialized as raw JSON. quote! { serde_json::Value } } else { graphql_type_to_rust(name) } } - GqlType::NonNull(inner) => resolve_inner(inner, type_kind_map), + GqlType::NonNull(inner) => resolve_required(inner, type_kind_map, depth, container, reach), GqlType::List(inner) => { - let elem = resolve_inner(inner, type_kind_map); + let elem = resolve(inner, type_kind_map, depth + 1, container, reach); quote! { Vec<#elem> } } } } + +#[cfg(test)] +mod tests { + use super::*; + + fn type_kind_map() -> HashMap { + let mut m = HashMap::new(); + m.insert("String".to_string(), TypeKind::Scalar); + m + } + + /// Render a single field's resolved Rust type with whitespace collapsed, + /// so test assertions can compare against a clean expected string without + /// matching the exact spacing `quote!` produces. Uses an empty reach map + /// so cycles are impossible — `Box` never applies, isolating list/nullability + /// rules from Box rules. + fn rendered(ty: GqlType) -> String { + let reach: HashMap> = HashMap::new(); + resolve_input_type(&ty, &type_kind_map(), "Container", &reach) + .to_string() + .split_whitespace() + .collect::() + } + + fn named() -> GqlType { + GqlType::Named("String".to_string()) + } + fn nn(t: GqlType) -> GqlType { + GqlType::NonNull(Box::new(t)) + } + fn list(t: GqlType) -> GqlType { + GqlType::List(Box::new(t)) + } + + /// Each row covers one shape the GraphQL spec allows. The full table is + /// in one test so any drift is visible at a glance. + #[test] + fn input_field_shapes() { + // Scalars + assert_eq!(rendered(nn(named())), "String", "T!"); + assert_eq!(rendered(named()), "MaybeUndefined", "T"); + + // First-level lists + assert_eq!(rendered(nn(list(nn(named())))), "Vec", "[T!]!"); + assert_eq!( + rendered(list(nn(named()))), + "MaybeUndefined>", + "[T!]" + ); + assert_eq!(rendered(nn(list(named()))), "Vec>", "[T]!"); + assert_eq!( + rendered(list(named())), + "MaybeUndefined>>", + "[T]" + ); + + // Nested lists — verify the recursion compounds correctly + assert_eq!( + rendered(nn(list(nn(list(nn(named())))))), + "Vec>", + "[[T!]!]!" + ); + assert_eq!( + rendered(list(nn(list(named())))), + "MaybeUndefined>>>", + "[[T]!]" + ); + assert_eq!( + rendered(nn(list(list(nn(named()))))), + "Vec>>", + "[[T!]]!" + ); + } + + /// End-to-end: build an input struct with one field of each shape and + /// confirm the emitted code parses as valid Rust and contains the right + /// type wrappers + skip-serializing predicate on the right fields. + #[test] + fn emit_struct_for_all_list_shapes_parses() { + let mk_field = |name: &str, ty: GqlType| FieldDef { + name: name.to_string(), + description: None, + ty, + arguments: vec![], + }; + let inputs = vec![InputDef { + name: "Sample".to_string(), + description: None, + fields: vec![ + mk_field("a", nn(named())), + mk_field("b", named()), + mk_field("c", nn(list(nn(named())))), + mk_field("d", list(nn(named()))), + mk_field("e", nn(list(named()))), + mk_field("f", list(named())), + ], + }]; + let output = emit(&inputs, &type_kind_map()).to_string(); + syn::parse_file(&output).expect("emitted input code must be valid Rust"); + + let normalized: String = output.split_whitespace().collect(); + // Required field: no skip predicate, plain T + assert!(normalized.contains("puba:String,")); + // Nullable field: MaybeUndefined wrapper + skip predicate + assert!(normalized.contains("MaybeUndefined::is_undefined")); + assert!(normalized.contains("pubb:MaybeUndefined,")); + // Lists honor inner nullability uniformly + assert!(normalized.contains("pubc:Vec,")); + assert!(normalized.contains("pubd:MaybeUndefined>,")); + assert!(normalized.contains("pube:Vec>,")); + assert!(normalized.contains("pubf:MaybeUndefined>>,")); + } + + /// Box is only emitted on InputObject fields when the field would otherwise + /// create an infinite-size struct: at depth 0 (where the wrapper — + /// `MaybeUndefined<_>` or plain `T` — needs `T` sized) and the target can + /// transitively reach the containing struct. List-wrapped fields drop Box + /// because `Vec` is sized, and non-cyclic refs drop Box because there's + /// no size cycle to break. + #[test] + fn input_box_only_when_field_creates_size_cycle() { + // Schema: + // Container { f1: Filter, f2: [Filter!]!, f3: Loner } + // Filter { c: Container, kids: [Filter!]! } + // Loner { name: String } + let mut map = HashMap::new(); + map.insert("String".to_string(), TypeKind::Scalar); + map.insert("Container".to_string(), TypeKind::InputObject); + map.insert("Filter".to_string(), TypeKind::InputObject); + map.insert("Loner".to_string(), TypeKind::InputObject); + + let mk = |name: &str, ty: GqlType| FieldDef { + name: name.to_string(), + description: None, + ty, + arguments: vec![], + }; + + let inputs = vec![ + InputDef { + name: "Container".to_string(), + description: None, + fields: vec![ + mk("f1", GqlType::Named("Filter".to_string())), + mk("f2", nn(list(nn(GqlType::Named("Filter".to_string()))))), + mk("f3", GqlType::Named("Loner".to_string())), + ], + }, + InputDef { + name: "Filter".to_string(), + description: None, + fields: vec![ + mk("c", GqlType::Named("Container".to_string())), + mk("kids", nn(list(nn(GqlType::Named("Filter".to_string()))))), + ], + }, + InputDef { + name: "Loner".to_string(), + description: None, + fields: vec![mk("name", named())], + }, + ]; + + let normalized: String = emit(&inputs, &map).to_string().split_whitespace().collect(); + + // Container.f1 → Filter, and Filter reaches Container → Box. + assert!( + normalized.contains("pubf1:MaybeUndefined>,"), + "Container.f1 should be Boxed (cycle through Filter): {normalized}" + ); + // Container.f2 → list of Filter; Vec breaks the size cycle, no Box. + assert!( + normalized.contains("pubf2:Vec,"), + "Container.f2 should not be Boxed (Vec breaks cycle): {normalized}" + ); + // Container.f3 → Loner; Loner cannot reach Container, no Box. + assert!( + normalized.contains("pubf3:MaybeUndefined,"), + "Container.f3 should not be Boxed (no cycle): {normalized}" + ); + // Filter.c closes the cycle from the other side → Box. + assert!( + normalized.contains("pubc:MaybeUndefined>,"), + "Filter.c should be Boxed (cycle): {normalized}" + ); + // Filter.kids → self-list, breaks cycle via Vec → no Box. + assert!( + normalized.contains("pubkids:Vec,"), + "Filter.kids should not be Boxed (Vec breaks self-cycle): {normalized}" + ); + + let pretty = emit(&inputs, &map).to_string(); + if let Err(e) = syn::parse_file(&pretty) { + panic!("emitted code must be valid Rust: {e}\n\n{pretty}"); + } + } + + /// Three-node cycle (A → B → C → A). The 2-node case is covered above; this + /// one catches any bug specific to longer cycles — e.g. a DFS that + /// accidentally short-circuits at depth 1. A fourth type `Outsider` sits + /// upstream of the cycle and must NOT be considered cyclic just because it + /// can reach a cyclic node. + #[test] + fn input_box_handles_three_node_and_longer_cycles() { + let mut map = HashMap::new(); + map.insert("String".to_string(), TypeKind::Scalar); + map.insert("A".to_string(), TypeKind::InputObject); + map.insert("B".to_string(), TypeKind::InputObject); + map.insert("C".to_string(), TypeKind::InputObject); + map.insert("Outsider".to_string(), TypeKind::InputObject); + + let mk = |name: &str, ty: GqlType| FieldDef { + name: name.to_string(), + description: None, + ty, + arguments: vec![], + }; + + let inputs = vec![ + // Cycle: A → B → C → A + InputDef { + name: "A".to_string(), + description: None, + fields: vec![mk("b", GqlType::Named("B".to_string()))], + }, + InputDef { + name: "B".to_string(), + description: None, + fields: vec![mk("c", GqlType::Named("C".to_string()))], + }, + InputDef { + name: "C".to_string(), + description: None, + fields: vec![mk("a", GqlType::Named("A".to_string()))], + }, + // Outsider points INTO the cycle but nothing points back. + InputDef { + name: "Outsider".to_string(), + description: None, + fields: vec![mk("a", GqlType::Named("A".to_string()))], + }, + ]; + + let normalized: String = emit(&inputs, &map).to_string().split_whitespace().collect(); + + // Every edge in the cycle needs Box (the analysis is conservative — + // Boxing any single edge would suffice, but breaking all of them is + // simpler and always correct). + assert!( + normalized.contains("pubb:MaybeUndefined>,"), + "A.b should be Boxed (in cycle A→B→C→A): {normalized}" + ); + assert!( + normalized.contains("pubc:MaybeUndefined>,"), + "B.c should be Boxed (in cycle): {normalized}" + ); + assert!( + normalized.contains("pub\u{0061}:MaybeUndefined>,"), + "C.a should be Boxed (closes the cycle): {normalized}" + ); + + // Outsider.a → A. A cannot reach Outsider, so embedding A in Outsider + // is size-safe (A's own cycles are already broken by the Boxes above). + // The emit output contains both C.a and Outsider.a as `a: ...Box...,` + // so we need to look at the Outsider struct specifically. Easiest way: + // the emitted source has exactly four struct bodies; only C's a field + // should be boxed. Verify by counting. + let box_a_count = normalized.matches("Box").count(); + assert_eq!( + box_a_count, 1, + "only C.a should Box A; Outsider.a should not. Got {box_a_count} in: {normalized}" + ); + + let pretty = emit(&inputs, &map).to_string(); + if let Err(e) = syn::parse_file(&pretty) { + panic!("emitted code must be valid Rust: {e}\n\n{pretty}"); + } + } +} diff --git a/crates/lineark-codegen/src/emit_mutations.rs b/crates/lineark-codegen/src/emit_mutations.rs index 41948df..4a6c444 100644 --- a/crates/lineark-codegen/src/emit_mutations.rs +++ b/crates/lineark-codegen/src/emit_mutations.rs @@ -111,19 +111,16 @@ fn emit_mutation( for pf in &payload_obj.fields { let base = pf.ty.base_name(); match type_kind_map.get(base) { - Some(TypeKind::Scalar) | Some(TypeKind::Enum) => { - if pf.name != "lastSyncId" { - scalar_parts.push(pf.name.clone()); - } + Some(TypeKind::Scalar) | Some(TypeKind::Enum) if pf.name != "lastSyncId" => { + scalar_parts.push(pf.name.clone()); } - Some(TypeKind::Object) => { - // Only treat as entity if the Object type implements Node (has an `id` field). - if entity_info.is_none() { - if let Some(obj) = object_map.get(base) { - if obj.fields.iter().any(|f| f.name == "id") { - entity_info = - Some((pf.name.clone(), base.to_string(), is_list_type(&pf.ty))); - } + // Only treat as entity if the Object type implements Node (has an `id` field), + // and only pick the first such field per payload. + Some(TypeKind::Object) if entity_info.is_none() => { + if let Some(obj) = object_map.get(base) { + if obj.fields.iter().any(|f| f.name == "id") { + entity_info = + Some((pf.name.clone(), base.to_string(), is_list_type(&pf.ty))); } } } diff --git a/crates/lineark-codegen/src/emit_types.rs b/crates/lineark-codegen/src/emit_types.rs index 8c76dfc..0d1f571 100644 --- a/crates/lineark-codegen/src/emit_types.rs +++ b/crates/lineark-codegen/src/emit_types.rs @@ -1,17 +1,20 @@ +use crate::dep_graph::{self, reaches}; use crate::emit_queries::{has_required_arguments, EXCLUDED_FIELDS}; use crate::emit_scalars::graphql_type_to_rust; use crate::parser::{self, GqlType, ObjectDef, TypeKind}; use heck::ToSnakeCase; use proc_macro2::TokenStream; use quote::quote; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; pub fn emit(objects: &[ObjectDef], type_kind_map: &HashMap) -> TokenStream { + let reach = compute_object_reachability(objects, type_kind_map); + let items: Vec = objects .iter() .filter(|o| !o.name.is_empty()) .map(|o| { - let struct_tokens = emit_struct(o, type_kind_map); + let struct_tokens = emit_struct(o, type_kind_map, &reach); let trait_tokens = emit_graphql_fields_impl(o, type_kind_map); quote! { #struct_tokens #trait_tokens } }) @@ -30,7 +33,56 @@ pub fn emit(objects: &[ObjectDef], type_kind_map: &HashMap) -> } } -fn emit_struct(obj: &ObjectDef, type_kind_map: &HashMap) -> TokenStream { +/// Build the Object dependency graph (edges through direct, non-list field +/// references only) and compute transitive reachability. The result is used to +/// decide on a per-field basis whether `Box` is needed. +fn compute_object_reachability( + objects: &[ObjectDef], + type_kind_map: &HashMap, +) -> HashMap> { + let mut edges: HashMap> = HashMap::with_capacity(objects.len()); + for obj in objects { + if obj.name.is_empty() { + continue; + } + // Dedupe: multiple fields can target the same Object type, and duplicate + // edges would just expand the DFS stack without changing reachability. + let mut deps: HashSet = HashSet::new(); + for field in &obj.fields { + if let Some(target) = direct_object_target(&field.ty, type_kind_map) { + deps.insert(target.to_string()); + } + } + edges.insert(obj.name.clone(), deps.into_iter().collect()); + } + dep_graph::reachability(&edges) +} + +/// If `ty` is a direct (non-list) reference to an Object type, return that +/// type's name. Lists return `None` because `Vec` already breaks size +/// cycles, so list-wrapped references aren't size-relevant edges. +fn direct_object_target<'a>( + ty: &'a GqlType, + type_kind_map: &HashMap, +) -> Option<&'a str> { + match ty { + GqlType::NonNull(inner) => direct_object_target(inner, type_kind_map), + GqlType::Named(name) => { + if matches!(type_kind_map.get(name.as_str()), Some(TypeKind::Object)) { + Some(name.as_str()) + } else { + None + } + } + GqlType::List(_) => None, + } +} + +fn emit_struct( + obj: &ObjectDef, + type_kind_map: &HashMap, + reach: &HashMap>, +) -> TokenStream { let name = quote::format_ident!("{}", obj.name); let doc = parser::doc_comment_tokens(&obj.description); @@ -48,7 +100,7 @@ fn emit_struct(obj: &ObjectDef, type_kind_map: &HashMap) -> To let ident = quote::format_ident!("{}", safe_name); quote! { #ident } }; - let rust_type = resolve_type(&f.ty, type_kind_map); + let rust_type = resolve_type(&f.ty, type_kind_map, &obj.name, reach); let fdoc = parser::doc_comment_tokens(&f.description); quote! { #fdoc @@ -78,41 +130,72 @@ fn is_includable_field(ty: &GqlType, type_kind_map: &HashMap) ) } -/// Resolve a GraphQL type to its Rust type tokens. -/// All output type fields are wrapped in `Option`. -/// Uses `Box` for Object-typed fields to avoid infinite-size types -/// from mutual recursion (e.g., Integration <-> Organization). -fn resolve_type(ty: &GqlType, type_kind_map: &HashMap) -> TokenStream { - let inner = resolve_inner_type(ty, type_kind_map); - let base = ty.base_name(); - if matches!(type_kind_map.get(base), Some(TypeKind::Object)) { +/// Resolve a GraphQL output field type to its Rust type tokens. +/// +/// **Outermost** is always wrapped in `Option` regardless of the schema's +/// required marker — this lets consumers define lean structs via +/// `#[derive(GraphQLFields)]` that omit fields they don't select, with the +/// missing field deserializing as `None`. +/// +/// **`Box`** is added only when actually required for sizedness: when the +/// field is a direct (non-list) reference to an Object that can transitively +/// reach `container` in the schema's reference graph. Non-cyclic Object +/// references emit as `Option` directly, saving a heap allocation per +/// instance. List-wrapped Object references never need `Box` because `Vec` +/// is already heap-allocated and sized. +/// +/// **Inside lists**, nullability is honored faithfully: nullable elements +/// become `Option`, required elements stay bare `T`. GraphQL list slots +/// are always materialized on the wire, so there's no "field omitted" +/// concept inside a list — `Option` is the right shape. +fn resolve_type( + ty: &GqlType, + type_kind_map: &HashMap, + container: &str, + reach: &HashMap>, +) -> TokenStream { + let inner = resolve_required(ty, type_kind_map); + let needs_box = direct_object_target(ty, type_kind_map) + .is_some_and(|target| reaches(target, container, reach)); + if needs_box { quote! { Option> } } else { quote! { Option<#inner> } } } -/// Resolve the inner type (without the outer Option wrapper). -fn resolve_inner_type(ty: &GqlType, type_kind_map: &HashMap) -> TokenStream { +/// Resolve a type as if it were required at its current position. Strips +/// outer `NonNull` markers, recurses into lists via [`resolve_list_element`]. +fn resolve_required(ty: &GqlType, type_kind_map: &HashMap) -> TokenStream { match ty { - GqlType::Named(name) => { - let base = name.as_str(); - match type_kind_map.get(base) { - Some(TypeKind::Object) => { - let ident = quote::format_ident!("{}", name); - quote! { #ident } - } - _ => graphql_type_to_rust(name), + GqlType::Named(name) => match type_kind_map.get(name.as_str()) { + Some(TypeKind::Object) => { + let ident = quote::format_ident!("{}", name); + quote! { #ident } } - } - GqlType::NonNull(inner) => resolve_inner_type(inner, type_kind_map), + _ => graphql_type_to_rust(name), + }, + GqlType::NonNull(inner) => resolve_required(inner, type_kind_map), GqlType::List(inner) => { - let elem = resolve_inner_type(inner, type_kind_map); + let elem = resolve_list_element(inner, type_kind_map); quote! { Vec<#elem> } } } } +/// Resolve a single list element. Nullable elements wrap in `Option`, +/// required elements stay bare. Mutually recurses with [`resolve_required`] +/// to handle nested lists. +fn resolve_list_element(ty: &GqlType, type_kind_map: &HashMap) -> TokenStream { + match ty { + GqlType::NonNull(inner) => resolve_required(inner, type_kind_map), + other => { + let payload = resolve_required(other, type_kind_map); + quote! { Option<#payload> } + } + } +} + /// Generate `impl GraphQLFields for T` — returns all scalar/enum field names. /// Sets `type FullType = Self` so full types validate against themselves. fn emit_graphql_fields_impl( @@ -203,7 +286,9 @@ mod tests { } #[test] - fn emit_includes_object_fields_with_box() { + fn emit_includes_object_fields_without_unnecessary_box() { + // Single Issue type with a Team field. Team has no schema definition + // here, so it cannot reach back to Issue → no cycle, no Box. let type_kind_map = make_type_kind_map(); let objects = vec![ObjectDef { name: "Issue".to_string(), @@ -225,9 +310,12 @@ mod tests { }]; let output = emit(&objects, &type_kind_map).to_string(); assert!(output.contains("pub id")); - // Object fields are included and wrapped in Box to prevent infinite-size types assert!(output.contains("pub team")); - assert!(output.contains("Box")); + // No cycle in the graph → no Box wrapping. + assert!( + !output.contains("Box"), + "no Box should be emitted when there is no size cycle: {output}" + ); } #[test] @@ -323,6 +411,172 @@ mod tests { assert!(output.contains("label_ids")); } + /// Render a single field's type for `output_field_shapes` — there is no + /// container to reach back to, so cycles are impossible and `Box` never + /// applies. This isolates the list/nullability rules from the Box rules. + fn rendered_output(ty: GqlType) -> String { + let map = make_type_kind_map(); + let reach: HashMap> = HashMap::new(); + resolve_type(&ty, &map, "Container", &reach) + .to_string() + .split_whitespace() + .collect::() + } + + fn n(t: GqlType) -> GqlType { + GqlType::NonNull(Box::new(t)) + } + fn l(t: GqlType) -> GqlType { + GqlType::List(Box::new(t)) + } + fn s() -> GqlType { + GqlType::Named("String".to_string()) + } + + /// Output convention: outermost is **always** wrapped in `Option<>` + /// (lean-struct selection allows any field to be missing). Inside lists, + /// element nullability is honored faithfully. + #[test] + fn output_field_shapes() { + // Outer wrap is Option regardless of `!` — this is the lean-struct convention. + assert_eq!(rendered_output(n(s())), "Option", "T!"); + assert_eq!(rendered_output(s()), "Option", "T"); + + // First-level lists + assert_eq!( + rendered_output(n(l(n(s())))), + "Option>", + "[T!]!" + ); + assert_eq!(rendered_output(l(n(s()))), "Option>", "[T!]"); + assert_eq!( + rendered_output(n(l(s()))), + "Option>>", + "[T]!" + ); + assert_eq!( + rendered_output(l(s())), + "Option>>", + "[T]" + ); + + // Nested lists + assert_eq!( + rendered_output(n(l(n(l(n(s())))))), + "Option>>", + "[[T!]!]!" + ); + assert_eq!( + rendered_output(l(n(l(s())))), + "Option>>>", + "[[T]!]" + ); + assert_eq!( + rendered_output(n(l(l(n(s()))))), + "Option>>>", + "[[T!]]!" + ); + } + + /// Box is only emitted when the field would otherwise create an infinite-size + /// Rust struct: target must be a *direct* (non-list) Object reference whose + /// type can transitively reach the containing struct. Everything else gets a + /// plain `Option`. + #[test] + fn box_only_when_field_creates_size_cycle() { + // Schema: + // Container { team: Team } // direct ref + // Container { teams: [Team!]! } // list-wrapped — Vec breaks cycles + // Team { container: Container } // closes the cycle Container ↔ Team + // Loner { name: String } // unrelated, never referenced back + let mut map = make_type_kind_map(); + map.insert("Container".to_string(), TypeKind::Object); + map.insert("Loner".to_string(), TypeKind::Object); + + let objects = vec![ + ObjectDef { + name: "Container".to_string(), + description: None, + fields: vec![ + FieldDef { + name: "team".to_string(), + description: None, + ty: GqlType::Named("Team".to_string()), + arguments: vec![], + }, + FieldDef { + name: "teams".to_string(), + description: None, + ty: n(l(n(GqlType::Named("Team".to_string())))), + arguments: vec![], + }, + FieldDef { + name: "loner".to_string(), + description: None, + ty: GqlType::Named("Loner".to_string()), + arguments: vec![], + }, + ], + }, + ObjectDef { + name: "Team".to_string(), + description: None, + fields: vec![FieldDef { + name: "container".to_string(), + description: None, + ty: GqlType::Named("Container".to_string()), + arguments: vec![], + }], + }, + ObjectDef { + name: "Loner".to_string(), + description: None, + fields: vec![FieldDef { + name: "name".to_string(), + description: None, + ty: GqlType::Named("String".to_string()), + arguments: vec![], + }], + }, + ]; + + let output: String = emit(&objects, &map) + .to_string() + .split_whitespace() + .collect(); + + // Container.team is in a cycle (Container → Team → Container) → Box. + assert!( + output.contains("pubteam:Option>,"), + "Container.team should be Boxed (cycle): {output}" + ); + // Container.teams uses a Vec → Vec breaks the size cycle, no Box. + assert!( + output.contains("pubteams:Option>,"), + "Container.teams should not be Boxed (Vec breaks cycle): {output}" + ); + // Container.loner: Loner has no path back to Container → no Box. + assert!( + output.contains("publoner:Option,"), + "Container.loner should not be Boxed (no cycle): {output}" + ); + // Team.container closes the cycle from the other side → Box. + assert!( + output.contains("pubcontainer:Option>,"), + "Team.container should be Boxed (cycle): {output}" + ); + // Loner.name is a scalar → no Box. + assert!( + output.contains("pubname:Option,"), + "Loner.name should be plain Option: {output}" + ); + + let pretty = emit(&objects, &map).to_string(); + if let Err(e) = syn::parse_file(&pretty) { + panic!("emitted code must be valid Rust: {e}\n\n{pretty}"); + } + } + #[test] fn emit_graphql_fields_selection() { let type_kind_map = make_type_kind_map(); diff --git a/crates/lineark-codegen/src/main.rs b/crates/lineark-codegen/src/main.rs index 91d3567..dfcfae3 100644 --- a/crates/lineark-codegen/src/main.rs +++ b/crates/lineark-codegen/src/main.rs @@ -1,3 +1,4 @@ +mod dep_graph; mod emit_enums; mod emit_inputs; mod emit_mutations; diff --git a/crates/lineark-sdk/README.md b/crates/lineark-sdk/README.md index 5ae96b6..df9fde4 100644 --- a/crates/lineark-sdk/README.md +++ b/crates/lineark-sdk/README.md @@ -152,13 +152,41 @@ use lineark_sdk::generated::inputs::IssueCreateInput; use lineark_sdk::generated::types::Issue; let payload = client.issue_create::(IssueCreateInput { - title: Some("Fix the bug".to_string()), - team_id: Some("team-uuid".to_string()), - priority: Some(2), + team_id: "team-uuid".to_string(), // required + title: "Fix the bug".to_string().into(), // nullable → MaybeUndefined + priority: 2.into(), // nullable → MaybeUndefined ..Default::default() }).await?; ``` +### Three-state fields on update/create inputs + +Nullable input fields use [`MaybeUndefined`](crate::MaybeUndefined) so you +can distinguish "leave unchanged" from "explicit null" — GraphQL's nullable +inputs carry both meanings, and `Option` + `skip_serializing_if` can only +express the first. + +| Intent | Value | Wire form | +|---|---|---| +| Leave unchanged | `MaybeUndefined::Undefined` (the default) | field omitted | +| Clear on the server | `MaybeUndefined::Null` | `"field": null` | +| Set to a value | `MaybeUndefined::Value(v)` or `v.into()` | `"field": v` | + +```rust +use lineark_sdk::generated::inputs::ProjectUpdateInput; +use lineark_sdk::MaybeUndefined; + +// Rename a project AND clear its lead in a single mutation. +let input = ProjectUpdateInput { + name: "New name".to_string().into(), + lead_id: MaybeUndefined::Null, + ..Default::default() +}; +client.project_update::(input, project_id).await?; +``` + +Required fields (schema type ends with `!`) stay as plain `T` — no wrapper. + | Method | Description | |--------|-------------| | `issue_create(input)` | Create an issue | diff --git a/crates/lineark-sdk/src/field_update.rs b/crates/lineark-sdk/src/field_update.rs new file mode 100644 index 0000000..3450040 --- /dev/null +++ b/crates/lineark-sdk/src/field_update.rs @@ -0,0 +1,222 @@ +//! Three-state wrapper for nullable input fields. +//! +//! GraphQL distinguishes between an omitted field ("don't change this") and an +//! explicit `null` ("clear this field"). `Option` + `skip_serializing_if` +//! can only express the first. [`MaybeUndefined`] carries both, so +//! generated input types can drive the Linear API faithfully without hand-rolled +//! JSON patches on the consumer side. +//! +//! Codegen emits nullable input fields as: +//! +//! ```rust,ignore +//! #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] +//! pub lead_id: MaybeUndefined, +//! ``` +//! +//! Consumers choose one of: +//! +//! | Intent | Value | Wire form | +//! |---------------------------|--------------------------------|-----------------| +//! | Leave unchanged | `MaybeUndefined::Undefined` | field omitted | +//! | Clear on the server | `MaybeUndefined::Null` | `"field": null` | +//! | Set to a value | `MaybeUndefined::Value(v)` | `"field": v` | + +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +/// A three-state field value: undefined (omitted), null (explicit clear), or a concrete value. +/// +/// See the [module documentation](self) for the rationale and wire-format mapping. +/// +/// # Struct-context contract +/// +/// The [`Undefined`](MaybeUndefined::Undefined) / [`Null`](MaybeUndefined::Null) +/// distinction is preserved on the wire **only** when this value sits in a +/// struct field carrying +/// `#[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")]` +/// — which is what codegen emits for every nullable input field. In any other +/// context (`serde_json::to_value(MaybeUndefined::::Undefined)`, a bare +/// value inside a `Vec>`, etc.) `Undefined` cannot be +/// "omitted" — there's no containing struct to omit it from — and serializes +/// as JSON `null`, collapsing the distinction. Use this type *only* as a +/// struct field paired with the skip predicate above. +/// +/// # Derive bounds +/// +/// The [`Eq`] and [`Hash`] impls are conditional on `T: Eq + Hash`. Types +/// containing non-`Eq` scalars (notably `f64`) therefore can't derive those +/// traits transitively — this is expected and matches `Option`. +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum MaybeUndefined { + /// Field is absent from the serialized output. + Undefined, + /// Field is serialized as JSON `null` (clears the value on the server). + Null, + /// Field is serialized as the wrapped value. + Value(T), +} + +impl MaybeUndefined { + /// Returns `true` if the value is [`MaybeUndefined::Undefined`]. + /// + /// Codegen uses this as the `skip_serializing_if` predicate so `Undefined` + /// fields are omitted from the serialized output entirely. + pub fn is_undefined(&self) -> bool { + matches!(self, Self::Undefined) + } +} + +// Manual impl (not `#[derive(Default)]`) so the `Default` bound on `T` is +// avoided — consumers need `MaybeUndefined::::default()` to work for any T, +// not just those that themselves implement `Default`. +#[allow(clippy::derivable_impls)] +impl Default for MaybeUndefined { + fn default() -> Self { + Self::Undefined + } +} + +impl From for MaybeUndefined { + fn from(v: T) -> Self { + Self::Value(v) + } +} + +/// Lifts an `Option` into the three-state world, collapsing `None` to +/// [`Undefined`](MaybeUndefined::Undefined). +/// +/// This is the right default for **constructing** input values: a CLI flag +/// that wasn't passed (`Option::None`) means "leave the field unchanged", so +/// it maps to `Undefined`. If you instead want `None` to clear the field on +/// the server, use [`MaybeUndefined::Null`] explicitly. +/// +/// Note the intentional asymmetry with [`Deserialize`]: when round-tripping +/// through JSON, an absent field deserializes to `Undefined` (via the +/// `#[serde(default)]` on the field), while an explicit JSON `null` +/// deserializes to `Null`. That matches GraphQL's wire semantics. `Option` +/// doesn't carry the "absent" vs "null" distinction, so `From>` +/// can't preserve it either. +impl From> for MaybeUndefined { + fn from(o: Option) -> Self { + match o { + Some(v) => Self::Value(v), + None => Self::Undefined, + } + } +} + +impl Serialize for MaybeUndefined { + fn serialize(&self, s: S) -> Result { + match self { + // Unreachable in normal use: codegen emits + // `skip_serializing_if = "MaybeUndefined::is_undefined"`, so serde + // never asks us to serialize the Undefined variant on struct fields. + Self::Undefined => s.serialize_none(), + Self::Null => s.serialize_none(), + Self::Value(v) => v.serialize(s), + } + } +} + +/// Maps the three JSON inputs a struct field can present as follows: +/// +/// | Input | Result | +/// |--------------------------------|-------------| +/// | field absent from JSON | `Undefined` (via `#[serde(default)]`) | +/// | field present with `null` | `Null` | +/// | field present with a value `v` | `Value(v)` | +/// +/// Absent-field handling is driven by `#[serde(default)]` on the struct +/// field, not by this impl — serde only calls `deserialize` when the key is +/// present. Codegen emits that attribute on every nullable input field, which +/// is what preserves the three-state distinction on round-trip. +/// +/// Note the intentional asymmetry with [`From>`]: `None → Undefined` +/// during construction (a missing CLI flag shouldn't touch the server), +/// but JSON `null → Null` during deserialization (the server *did* send +/// `null`). +impl<'de, T: Deserialize<'de>> Deserialize<'de> for MaybeUndefined { + fn deserialize>(d: D) -> Result { + Option::::deserialize(d).map(|o| match o { + Some(v) => Self::Value(v), + None => Self::Null, + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use serde::{Deserialize, Serialize}; + + #[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq)] + struct Host { + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + field: MaybeUndefined, + } + + #[test] + fn default_is_undefined() { + let m: MaybeUndefined = MaybeUndefined::default(); + assert!(matches!(m, MaybeUndefined::Undefined)); + assert!(m.is_undefined()); + } + + #[test] + fn from_value_is_value() { + let m: MaybeUndefined = MaybeUndefined::from("hi".to_string()); + assert_eq!(m, MaybeUndefined::Value("hi".to_string())); + } + + #[test] + fn from_option_maps_correctly() { + let some: MaybeUndefined = MaybeUndefined::from(Some(5)); + let none: MaybeUndefined = MaybeUndefined::from(Option::::None); + assert_eq!(some, MaybeUndefined::Value(5)); + assert_eq!(none, MaybeUndefined::Undefined); + } + + #[test] + fn serialize_value_emits_value() { + let host = Host { + field: MaybeUndefined::Value("hello".to_string()), + }; + assert_eq!( + serde_json::to_string(&host).unwrap(), + r#"{"field":"hello"}"# + ); + } + + #[test] + fn serialize_null_emits_null() { + let host = Host { + field: MaybeUndefined::Null, + }; + assert_eq!(serde_json::to_string(&host).unwrap(), r#"{"field":null}"#); + } + + #[test] + fn serialize_undefined_is_skipped() { + let host = Host { + field: MaybeUndefined::Undefined, + }; + assert_eq!(serde_json::to_string(&host).unwrap(), r#"{}"#); + } + + #[test] + fn deserialize_value_is_value() { + let host: Host = serde_json::from_str(r#"{"field":"hello"}"#).unwrap(); + assert_eq!(host.field, MaybeUndefined::Value("hello".to_string())); + } + + #[test] + fn deserialize_null_is_null() { + let host: Host = serde_json::from_str(r#"{"field":null}"#).unwrap(); + assert_eq!(host.field, MaybeUndefined::Null); + } + + #[test] + fn deserialize_absent_is_undefined() { + let host: Host = serde_json::from_str(r#"{}"#).unwrap(); + assert_eq!(host.field, MaybeUndefined::Undefined); + } +} diff --git a/crates/lineark-sdk/src/generated/client_impl.rs b/crates/lineark-sdk/src/generated/client_impl.rs index 2cc9a11..a0350da 100644 --- a/crates/lineark-sdk/src/generated/client_impl.rs +++ b/crates/lineark-sdk/src/generated/client_impl.rs @@ -13,19 +13,19 @@ use crate::error::LinearError; use crate::field_selection::GraphQLFields; use serde::de::DeserializeOwned; impl Client { - /// All issue workflow states. + /// All issue workflow states (issue statuses). Returns a paginated list of workflow states visible to the authenticated user, across all teams they have access to. /// /// Full type: [`WorkflowState`](super::types::WorkflowState) pub fn workflow_states(&self) -> WorkflowStatesQueryBuilder<'_, T> { crate::generated::queries::workflow_states(self) } - /// All users for the organization. + /// All users in the workspace. Supports filtering, sorting, and pagination. /// /// Full type: [`User`](super::types::User) pub fn users(&self) -> UsersQueryBuilder<'_, T> { crate::generated::queries::users(self) } - /// The currently authenticated user. + /// The currently authenticated user making the API request. /// /// Full type: [`User`](super::types::User) pub async fn whoami>( @@ -33,13 +33,13 @@ impl Client { ) -> Result { crate::generated::queries::whoami::(self).await } - /// All projects. + /// Returns all projects in the workspace, with optional filtering and sorting. /// /// Full type: [`Project`](super::types::Project) pub fn projects(&self) -> ProjectsQueryBuilder<'_, T> { crate::generated::queries::projects(self) } - /// One specific project. + /// Returns a single project by its identifier or URL slug. /// /// Full type: [`Project`](super::types::Project) pub async fn project>( @@ -48,13 +48,13 @@ impl Client { ) -> Result { crate::generated::queries::project::(self, id).await } - /// All teams whose issues can be accessed by the user. This might be different from `administrableTeams`, which also includes teams whose settings can be changed by the user. + /// All teams whose issues the user can access. This includes public teams and private teams the user is a member of. This may differ from `administrableTeams`, which returns teams whose settings the user can change but whose issues they don't necessarily have access to. /// /// Full type: [`Team`](super::types::Team) pub fn teams(&self) -> TeamsQueryBuilder<'_, T> { crate::generated::queries::teams(self) } - /// One specific team. + /// Fetches a specific team by its ID. /// /// Full type: [`Team`](super::types::Team) pub async fn team>( @@ -63,25 +63,25 @@ impl Client { ) -> Result { crate::generated::queries::team::(self, id).await } - /// Search issues. + /// Search issues by text query using full-text and vector search. Results are ranked by relevance unless an orderBy parameter is specified. Supports optional issue filters and comment inclusion. Rate-limited to 30 requests per minute. /// /// Full type: [`IssueSearchResult`](super::types::IssueSearchResult) pub fn search_issues(&self, term: impl Into) -> SearchIssuesQueryBuilder<'_, T> { crate::generated::queries::search_issues(self, term) } - /// All project statuses. + /// Returns all project statuses in the workspace. /// /// Full type: [`ProjectStatus`](super::types::ProjectStatus) pub fn project_statuses(&self) -> ProjectStatusesQueryBuilder<'_, T> { crate::generated::queries::project_statuses(self) } - /// All milestones for the project. + /// Returns all project milestones in the workspace, with optional filtering. /// /// Full type: [`ProjectMilestone`](super::types::ProjectMilestone) pub fn project_milestones(&self) -> ProjectMilestonesQueryBuilder<'_, T> { crate::generated::queries::project_milestones(self) } - /// One specific project milestone. + /// Returns a single project milestone by its identifier. /// /// Full type: [`ProjectMilestone`](super::types::ProjectMilestone) pub async fn project_milestone< @@ -92,19 +92,19 @@ impl Client { ) -> Result { crate::generated::queries::project_milestone::(self, id).await } - /// All project labels. + /// Returns all project labels in the workspace, with optional filtering. /// /// Full type: [`ProjectLabel`](super::types::ProjectLabel) pub fn project_labels(&self) -> ProjectLabelsQueryBuilder<'_, T> { crate::generated::queries::project_labels(self) } - /// All issues. + /// All issues. Returns a paginated list of issues visible to the authenticated user. Can be filtered by various criteria including team, assignee, state, labels, project, and cycle. /// /// Full type: [`Issue`](super::types::Issue) pub fn issues(&self) -> IssuesQueryBuilder<'_, T> { crate::generated::queries::issues(self) } - /// One specific issue. + /// One specific issue, looked up by its unique identifier. /// /// Full type: [`Issue`](super::types::Issue) pub async fn issue>( @@ -124,13 +124,13 @@ impl Client { ) -> Result, LinearError> { crate::generated::queries::issue_vcs_branch_search::(self, branch_name).await } - /// All issue relationships. + /// All issue relations. Returns a paginated list of all issue relations (blocks, blocked by, relates to, duplicates) visible to the authenticated user. /// /// Full type: [`IssueRelation`](super::types::IssueRelation) pub fn issue_relations(&self) -> IssueRelationsQueryBuilder<'_, T> { crate::generated::queries::issue_relations(self) } - /// One specific issue relation. + /// One specific issue relation, looked up by its unique identifier. /// /// Full type: [`IssueRelation`](super::types::IssueRelation) pub async fn issue_relation< @@ -141,19 +141,19 @@ impl Client { ) -> Result { crate::generated::queries::issue_relation::(self, id).await } - /// All issue labels. + /// All issue labels. Returns a paginated list of labels visible to the authenticated user, including both workspace-level and team-scoped labels. /// /// Full type: [`IssueLabel`](super::types::IssueLabel) pub fn issue_labels(&self) -> IssueLabelsQueryBuilder<'_, T> { crate::generated::queries::issue_labels(self) } - /// All documents in the workspace. + /// All documents the user has access to in the workspace. /// /// Full type: [`Document`](super::types::Document) pub fn documents(&self) -> DocumentsQueryBuilder<'_, T> { crate::generated::queries::documents(self) } - /// One specific document. + /// A specific document by ID or slug. /// /// Full type: [`Document`](super::types::Document) pub async fn document< @@ -164,13 +164,13 @@ impl Client { ) -> Result { crate::generated::queries::document::(self, id).await } - /// All cycles. + /// All cycles accessible to the user. /// /// Full type: [`Cycle`](super::types::Cycle) pub fn cycles(&self) -> CyclesQueryBuilder<'_, T> { crate::generated::queries::cycles(self) } - /// One specific cycle. + /// One specific cycle, looked up by ID or slug. /// /// Full type: [`Cycle`](super::types::Cycle) pub async fn cycle>( @@ -205,61 +205,6 @@ impl Client { ) -> Result { crate::generated::mutations::image_upload_from_url(self, url).await } - /// Creates a new comment. - /// - /// Full type: [`Comment`](super::types::Comment) - pub async fn comment_create< - T: serde::de::DeserializeOwned - + crate::field_selection::GraphQLFields, - >( - &self, - input: CommentCreateInput, - ) -> Result { - crate::generated::mutations::comment_create::(self, input).await - } - /// Updates a comment. - /// - /// Full type: [`Comment`](super::types::Comment) - pub async fn comment_update< - T: serde::de::DeserializeOwned - + crate::field_selection::GraphQLFields, - >( - &self, - skip_edited_at: Option, - input: CommentUpdateInput, - id: String, - ) -> Result { - crate::generated::mutations::comment_update::(self, skip_edited_at, input, id).await - } - /// Deletes a comment. - pub async fn comment_delete(&self, id: String) -> Result { - crate::generated::mutations::comment_delete(self, id).await - } - /// Resolves a comment. - /// - /// Full type: [`Comment`](super::types::Comment) - pub async fn comment_resolve< - T: serde::de::DeserializeOwned - + crate::field_selection::GraphQLFields, - >( - &self, - resolving_comment_id: Option, - id: String, - ) -> Result { - crate::generated::mutations::comment_resolve::(self, resolving_comment_id, id).await - } - /// Unresolves a comment. - /// - /// Full type: [`Comment`](super::types::Comment) - pub async fn comment_unresolve< - T: serde::de::DeserializeOwned - + crate::field_selection::GraphQLFields, - >( - &self, - id: String, - ) -> Result { - crate::generated::mutations::comment_unresolve::(self, id).await - } /// Creates a new project. /// /// Full type: [`Project`](super::types::Project) @@ -286,7 +231,7 @@ impl Client { ) -> Result { crate::generated::mutations::project_update::(self, input, id).await } - /// Deletes (trashes) a project. + /// Deletes (trashes) a project. The project can be restored later with projectUnarchive. /// /// Full type: [`Project`](super::types::Project) pub async fn project_delete< @@ -298,7 +243,7 @@ impl Client { ) -> Result { crate::generated::mutations::project_delete::(self, id).await } - /// Creates a new team. The user who creates the team will automatically be added as a member to the newly created team. + /// Creates a new team. The user who creates the team will automatically be added as a member and owner of the newly created team. Default workflow states, labels, and other team resources are created alongside the team. /// /// Full type: [`Team`](super::types::Team) pub async fn team_create< @@ -311,7 +256,7 @@ impl Client { ) -> Result { crate::generated::mutations::team_create::(self, copy_settings_from_team_id, input).await } - /// Updates a team. + /// Updates a team's settings, properties, or configuration. Requires team owner or workspace admin permissions for most changes. /// /// Full type: [`Team`](super::types::Team) pub async fn team_update< @@ -325,11 +270,11 @@ impl Client { ) -> Result { crate::generated::mutations::team_update::(self, mapping, input, id).await } - /// Deletes a team. + /// Archives a team and schedules its data for deletion. Requires team owner or workspace admin permissions. pub async fn team_delete(&self, id: String) -> Result { crate::generated::mutations::team_delete(self, id).await } - /// Creates a new team membership. + /// Creates a new team membership, adding a user to a team. Validates that the user is not already a member, the team is not archived or retired, and the requesting user has permission to add members. /// /// Full type: [`TeamMembership`](super::types::TeamMembership) pub async fn team_membership_create< @@ -341,7 +286,7 @@ impl Client { ) -> Result { crate::generated::mutations::team_membership_create::(self, input).await } - /// Deletes a team membership. + /// Deletes a team membership, removing the user from the team. Users can remove their own membership, or team owners and workspace admins can remove other members. pub async fn team_membership_delete( &self, also_leave_parent_teams: Option, @@ -535,7 +480,7 @@ impl Client { ) -> Result { crate::generated::mutations::document_update::(self, input, id).await } - /// Deletes (trashes) a document. + /// Deletes (trashes) a document. The document is marked as trashed and archived, but not permanently removed. /// /// Full type: [`Document`](super::types::Document) pub async fn document_delete< @@ -547,4 +492,59 @@ impl Client { ) -> Result { crate::generated::mutations::document_delete::(self, id).await } + /// Creates a new comment. + /// + /// Full type: [`Comment`](super::types::Comment) + pub async fn comment_create< + T: serde::de::DeserializeOwned + + crate::field_selection::GraphQLFields, + >( + &self, + input: CommentCreateInput, + ) -> Result { + crate::generated::mutations::comment_create::(self, input).await + } + /// Updates a comment. + /// + /// Full type: [`Comment`](super::types::Comment) + pub async fn comment_update< + T: serde::de::DeserializeOwned + + crate::field_selection::GraphQLFields, + >( + &self, + skip_edited_at: Option, + input: CommentUpdateInput, + id: String, + ) -> Result { + crate::generated::mutations::comment_update::(self, skip_edited_at, input, id).await + } + /// Deletes a comment. + pub async fn comment_delete(&self, id: String) -> Result { + crate::generated::mutations::comment_delete(self, id).await + } + /// Resolves a comment thread. Marks the root comment as resolved by the current user. + /// + /// Full type: [`Comment`](super::types::Comment) + pub async fn comment_resolve< + T: serde::de::DeserializeOwned + + crate::field_selection::GraphQLFields, + >( + &self, + resolving_comment_id: Option, + id: String, + ) -> Result { + crate::generated::mutations::comment_resolve::(self, resolving_comment_id, id).await + } + /// Unresolves a previously resolved comment thread. Clears the resolved state on the root comment. + /// + /// Full type: [`Comment`](super::types::Comment) + pub async fn comment_unresolve< + T: serde::de::DeserializeOwned + + crate::field_selection::GraphQLFields, + >( + &self, + id: String, + ) -> Result { + crate::generated::mutations::comment_unresolve::(self, id).await + } } diff --git a/crates/lineark-sdk/src/generated/enums.rs b/crates/lineark-sdk/src/generated/enums.rs index cf8d773..c1824f8 100644 --- a/crates/lineark-sdk/src/generated/enums.rs +++ b/crates/lineark-sdk/src/generated/enums.rs @@ -64,6 +64,249 @@ pub enum AgentSessionType { #[serde(other)] Unknown, } +/// The action performed on the entity (leave empty if just found) +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationEntityCardWidgetArgsAction { + #[serde(rename = "created")] + Created, + #[serde(rename = "updated")] + Updated, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// `Internal` The entity type +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationEntityCardWidgetArgsType { + Issue, + Project, + Initiative, + InitiativeUpdate, + ProjectUpdate, + WorkflowDefinition, + Team, + Template, + Customer, + CustomerNeed, + Document, + CustomView, + Dashboard, + PullRequest, + Release, + ReleasePipeline, + AiPrompt, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// The action performed on the entities (leave empty if just found) +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationEntityListWidgetArgsAction { + #[serde(rename = "created")] + Created, + #[serde(rename = "updated")] + Updated, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// `Internal` The entity type +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationEntityListWidgetArgsEntitiesType { + Issue, + Project, + Initiative, + InitiativeUpdate, + ProjectUpdate, + WorkflowDefinition, + Team, + Template, + Customer, + CustomerNeed, + Document, + CustomView, + Dashboard, + PullRequest, + Release, + ReleasePipeline, + AiPrompt, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// The initial source of an AI conversation. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationInitialSource { + #[serde(rename = "slack")] + Slack, + #[serde(rename = "microsoftTeams")] + MicrosoftTeams, + #[serde(rename = "mcp")] + Mcp, + #[serde(rename = "directChat")] + DirectChat, + #[serde(rename = "comment")] + Comment, + #[serde(rename = "pullRequestComment")] + PullRequestComment, + #[serde(rename = "workflow")] + Workflow, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// The phase during which a conversation part was generated. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationPartPhase { + #[serde(rename = "commentary")] + Commentary, + #[serde(rename = "answer")] + Answer, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// The type of a part in an AI conversation. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationPartType { + #[serde(rename = "prompt")] + Prompt, + #[serde(rename = "toolCall")] + ToolCall, + #[serde(rename = "reasoning")] + Reasoning, + #[serde(rename = "text")] + Text, + #[serde(rename = "widget")] + Widget, + #[serde(rename = "widgetPlaceholder")] + WidgetPlaceholder, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationQueryUpdatesToolCallArgsUpdateType { + ProjectUpdate, + InitiativeUpdate, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationQueryViewToolCallArgsMode { + #[serde(rename = "list")] + List, + #[serde(rename = "insight")] + Insight, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// The status of an AI conversation. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationStatus { + #[serde(rename = "active")] + Active, + #[serde(rename = "complete")] + Complete, + #[serde(rename = "awaitingInput")] + AwaitingInput, + #[serde(rename = "error")] + Error, + #[serde(rename = "pending")] + Pending, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// The name of a tool that was called in an AI conversation. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationTool { + SearchEntities, + RetrieveEntities, + QueryView, + QueryActivity, + QueryUpdates, + SuggestValues, + CreateEntity, + UpdateEntity, + DeleteEntity, + RestoreEntity, + Research, + CodeIntelligence, + GetPullRequestDiff, + GetPullRequestFile, + HandoffToCodingSession, + TranscribeVideo, + TranscribeMedia, + SearchDocumentation, + WebSearch, + GetSlackConversationHistory, + GetMicrosoftTeamsConversationHistory, + NavigateToPage, + InvokeMcpTool, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// The name of a widget in an AI conversation. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiConversationWidgetName { + EntityCard, + EntityList, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// `Internal` The status of a prompt workflow. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiPromptProgressStatus { + #[serde(rename = "created")] + Created, + #[serde(rename = "inProgress")] + InProgress, + #[serde(rename = "finished")] + Finished, + #[serde(rename = "failed")] + Failed, + #[serde(rename = "canceled")] + Canceled, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// The type of AI prompt workflow. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum AiPromptType { + #[serde(rename = "productIntelligence")] + ProductIntelligence, + #[serde(rename = "internalResearch")] + InternalResearch, + #[serde(rename = "projectUpdates")] + ProjectUpdates, + #[serde(rename = "initiativeUpdates")] + InitiativeUpdates, + #[serde(rename = "agentGuidance")] + AgentGuidance, + #[serde(rename = "codeIntelligence")] + CodeIntelligence, + #[serde(rename = "aiConversation")] + AiConversation, + #[serde(rename = "slackIssueIntake")] + SlackIssueIntake, + #[serde(rename = "intercomIssueIntake")] + IntercomIssueIntake, + #[serde(rename = "gongIssueIntake")] + GongIssueIntake, + #[serde(rename = "zendeskIssueIntake")] + ZendeskIssueIntake, + #[serde(rename = "microsoftTeamsIssueIntake")] + MicrosoftTeamsIssueIntake, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum AuthenticationSessionType { #[serde(rename = "web")] @@ -220,7 +463,7 @@ pub enum FrequencyResolutionType { #[serde(other)] Unknown, } -/// The various states of a pull/merge request. +/// The Git events that can trigger an automation rule. Each value corresponds to a pull/merge request lifecycle event (e.g., branch created, PR opened for review, PR merged). #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum GitAutomationStates { #[serde(rename = "draft")] @@ -363,6 +606,8 @@ pub enum IntegrationService { Slack, #[serde(rename = "slackAsks")] SlackAsks, + #[serde(rename = "asksWeb")] + AsksWeb, #[serde(rename = "slackCustomViewNotifications")] SlackCustomViewNotifications, #[serde(rename = "slackOrgProjectUpdatesPost")] @@ -391,6 +636,10 @@ pub enum IntegrationService { McpServer, #[serde(rename = "microsoftTeams")] MicrosoftTeams, + #[serde(rename = "microsoftPersonal")] + MicrosoftPersonal, + #[serde(rename = "microsoftTeamsProjectPost")] + MicrosoftTeamsProjectPost, /// Catch-all for unknown/new variants added by Linear. #[serde(other)] Unknown, @@ -410,6 +659,35 @@ pub enum IssueRelationType { #[serde(other)] Unknown, } +/// Issue update fields that are disallowed for users with only shared access. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum IssueSharedAccessDisallowedField { + #[serde(rename = "projectId")] + ProjectId, + #[serde(rename = "teamId")] + TeamId, + #[serde(rename = "cycleId")] + CycleId, + #[serde(rename = "projectMilestoneId")] + ProjectMilestoneId, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// Policy controlling whether and by whom issues in a team can be shared with non-team-members. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum IssueSharingPolicy { + #[serde(rename = "disabled")] + Disabled, + #[serde(rename = "adminsOnly")] + AdminsOnly, + #[serde(rename = "allMembers")] + AllMembers, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} +/// The state of an issue suggestion, indicating whether it is active, accepted, or dismissed. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum IssueSuggestionState { #[serde(rename = "active")] @@ -424,6 +702,7 @@ pub enum IssueSuggestionState { #[serde(other)] Unknown, } +/// The type of an issue suggestion, indicating what kind of entity is being suggested (e.g., similar issue, assignee, label, team, project). #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum IssueSuggestionType { #[serde(rename = "team")] @@ -665,6 +944,21 @@ pub enum ProjectUpdateReminderFrequency { #[serde(other)] Unknown, } +/// `ALPHA` How a pull request check should be opened in the client. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum PullRequestCheckPresentation { + #[serde(rename = "jobLogs")] + JobLogs, + #[serde(rename = "runLogs")] + RunLogs, + #[serde(rename = "markdown")] + Markdown, + #[serde(rename = "externalOnly")] + ExternalOnly, + /// Catch-all for unknown/new variants added by Linear. + #[serde(other)] + Unknown, +} /// The method used to merge a pull request. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum PullRequestMergeMethod { @@ -741,7 +1035,7 @@ pub enum ReleaseChannel { #[serde(other)] Unknown, } -/// A type of release pipeline. +/// The type of a release pipeline, which determines how releases are created and managed. Continuous pipelines create a new completed release for each sync. Scheduled pipelines accumulate issues into a started release that is explicitly completed. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum ReleasePipelineType { #[serde(rename = "continuous")] @@ -752,7 +1046,7 @@ pub enum ReleasePipelineType { #[serde(other)] Unknown, } -/// A type of release stage. +/// The type of a release stage, which determines the release's lifecycle state. Types include planned, started, completed, and canceled. Each pipeline must have at least one stage of each type, though only started stages may have multiple instances. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum ReleaseStageType { #[serde(rename = "planned")] @@ -767,6 +1061,7 @@ pub enum ReleaseStageType { #[serde(other)] Unknown, } +/// Which day count to use for SLA calculations. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum SLADayCountType { #[serde(rename = "all")] @@ -884,6 +1179,8 @@ pub enum TriageRuleErrorType { Default, #[serde(rename = "labelGroupConflict")] LabelGroupConflict, + #[serde(rename = "codingAgentQuotaExceeded")] + CodingAgentQuotaExceeded, /// Catch-all for unknown/new variants added by Linear. #[serde(other)] Unknown, @@ -965,6 +1262,10 @@ pub enum UserFlagType { TryTriageDismissed, #[serde(rename = "tryGithubDismissed")] TryGithubDismissed, + #[serde(rename = "tryCursorDismissed")] + TryCursorDismissed, + #[serde(rename = "tryCodexDismissed")] + TryCodexDismissed, #[serde(rename = "rewindBannerDismissed")] RewindBannerDismissed, #[serde(rename = "helpIslandFeatureInsightsDismissed")] @@ -991,8 +1292,16 @@ pub enum UserFlagType { CommandMenuClearShortcutTip, #[serde(rename = "slackBotWelcomeMessageShown")] SlackBotWelcomeMessageShown, + #[serde(rename = "teamsBotWelcomeMessageShown")] + TeamsBotWelcomeMessageShown, #[serde(rename = "slackAgentPromoFromCreateNewIssueShown")] SlackAgentPromoFromCreateNewIssueShown, + #[serde(rename = "agentExamplesDismissed")] + AgentExamplesDismissed, + #[serde(rename = "agentHomePageNotice")] + AgentHomePageNotice, + #[serde(rename = "agentHomeHeadlineSeen")] + AgentHomeHeadlineSeen, #[serde(rename = "all")] All, /// Catch-all for unknown/new variants added by Linear. @@ -1014,7 +1323,7 @@ pub enum UserFlagUpdateOperation { #[serde(other)] Unknown, } -/// The different permission roles available to users on an organization. +/// The different permission roles available to users in a workspace. #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum UserRoleType { #[serde(rename = "owner")] @@ -1074,7 +1383,7 @@ pub enum UserSettingsThemePreset { #[serde(other)] Unknown, } -/// The type of view preferences (either user or organization level preferences). +/// The type of view preferences (either user or workspace level preferences). #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub enum ViewPreferencesType { #[serde(rename = "organization")] @@ -1114,6 +1423,8 @@ pub enum ViewType { Release, #[serde(rename = "continuousPipelineReleases")] ContinuousPipelineReleases, + #[serde(rename = "scheduledPipelineReleases")] + ScheduledPipelineReleases, #[serde(rename = "project")] Project, #[serde(rename = "projectDocuments")] @@ -1186,6 +1497,8 @@ pub enum ViewType { CreatedReviews, #[serde(rename = "agents")] Agents, + #[serde(rename = "focus")] + Focus, #[serde(rename = "feedAll")] FeedAll, #[serde(rename = "feedCreated")] @@ -1234,6 +1547,8 @@ pub enum WorkflowTriggerType { Issue, #[serde(rename = "project")] Project, + #[serde(rename = "release")] + Release, /// Catch-all for unknown/new variants added by Linear. #[serde(other)] Unknown, @@ -1242,12 +1557,16 @@ pub enum WorkflowTriggerType { pub enum WorkflowType { #[serde(rename = "sla")] Sla, - #[serde(rename = "custom")] - Custom, + #[serde(rename = "automation")] + Automation, #[serde(rename = "viewSubscription")] ViewSubscription, #[serde(rename = "triage")] Triage, + #[serde(rename = "triageAutomation")] + TriageAutomation, + #[serde(rename = "release")] + Release, /// Catch-all for unknown/new variants added by Linear. #[serde(other)] Unknown, diff --git a/crates/lineark-sdk/src/generated/inputs.rs b/crates/lineark-sdk/src/generated/inputs.rs index 2e9113e..9c67d02 100644 --- a/crates/lineark-sdk/src/generated/inputs.rs +++ b/crates/lineark-sdk/src/generated/inputs.rs @@ -2,9300 +2,9760 @@ //! //! Generated by lineark-codegen — do not edit. use super::enums::*; +use crate::field_update::MaybeUndefined; use serde::{Deserialize, Serialize}; /// Activity collection filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ActivityCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Filters that the activity's user must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user: MaybeUndefined>, /// Compound filters, all of which need to be matched by the activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some activities. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all activities. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } /// Activity filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ActivityFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Filters that the activity's user must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user: MaybeUndefined>, /// Compound filters, all of which need to be matched by the activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for creating an agent activity. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentActivityCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The agent session this activity belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub agent_session_id: Option, + pub agent_session_id: String, /// An optional modifier that provides additional instructions on how the activity should be interpreted. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub signal: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub signal: MaybeUndefined, /// Metadata about this agent activity's signal. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub signal_metadata: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub signal_metadata: MaybeUndefined, /// `Internal` Metadata about user-provided contextual information for this agent activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contextual_metadata: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contextual_metadata: MaybeUndefined, /// The content payload of the agent activity. This object is not strictly typed. /// See for typing details. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub content: Option, + pub content: serde_json::Value, /// Whether the activity is ephemeral, and should disappear after the next activity. Defaults to false. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ephemeral: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ephemeral: MaybeUndefined, } /// `Internal` Input for creating prompt-type agent activities (created by users). -#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentActivityCreatePromptInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The agent session this activity belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub agent_session_id: Option, + pub agent_session_id: String, /// An optional modifier that provides additional instructions on how the activity should be interpreted. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub signal: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub signal: MaybeUndefined, /// Metadata about this agent activity's signal. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub signal_metadata: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub signal_metadata: MaybeUndefined, /// `Internal` Metadata about user-provided contextual information for this agent activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contextual_metadata: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contextual_metadata: MaybeUndefined, /// The content payload of the prompt agent activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub content: Option>, + pub content: AgentActivityPromptCreateInputContent, /// The comment that contains the content of this activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub source_comment_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub source_comment_id: MaybeUndefined, } /// Agent activity filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentActivityFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the agent session ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub agent_session_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub agent_session_id: MaybeUndefined, /// Comparator for the agent activity's content type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Filters that the source comment must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub source_comment: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub source_comment: MaybeUndefined, /// Compound filters, all of which need to be matched by the agent activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the agent activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// `Internal` Input for creating prompt-type agent activities (created by users). -#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentActivityPromptCreateInputContent { /// The type of activity. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + pub r#type: AgentActivityType, /// A message requesting additional information or action from user in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// `Internal` The prompt content as a ProseMirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body_data: MaybeUndefined, } +/// `Internal` Input for creating an agent session on behalf of the current user. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentSessionCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The issue that this session will be associated with. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, /// The app user (agent) to create a session for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub app_user_id: Option, + pub app_user_id: String, /// `Internal` Serialized JSON representing the page contexts this session is related to. Used for direct chat sessions to provide context about the current page (e.g., Issue, Project). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub context: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub context: MaybeUndefined, } +/// Input for creating an agent session on a root comment. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentSessionCreateOnComment { /// The root comment that this session will be associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comment_id: Option, + pub comment_id: String, /// The URL of an external agent-hosted page associated with this session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_link: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_link: MaybeUndefined, /// URLs of external resources associated with this session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_urls: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_urls: MaybeUndefined>, } +/// Input for creating an agent session on an issue. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentSessionCreateOnIssue { /// The issue that this session will be associated with. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + pub issue_id: String, /// The URL of an external agent-hosted page associated with this session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_link: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_link: MaybeUndefined, /// URLs of external resources associated with this session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_urls: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_urls: MaybeUndefined>, } /// Input for an external URL associated with an agent session. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentSessionExternalUrlInput { /// The URL of the external resource. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + pub url: String, /// Label for the URL. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label: Option, + pub label: String, } +/// Input for updating the external URLs of an agent session. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentSessionUpdateExternalUrlInput { /// The URL of an external agent-hosted page associated with this session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_link: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_link: MaybeUndefined, /// URLs of external resources associated with this session. Replaces existing URLs. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_urls: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_urls: MaybeUndefined>, /// URLs of external resources to be added to this session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub added_external_urls: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_external_urls: MaybeUndefined>, /// URLs to be removed from this session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub removed_external_urls: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub removed_external_urls: MaybeUndefined>, } +/// Input for updating an agent session. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentSessionUpdateInput { /// The URL of an external agent-hosted page associated with this session. Only updatable by the OAuth application that owns the session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_link: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_link: MaybeUndefined, /// URLs of external resources associated with this session. Replaces existing URLs. Only updatable by the OAuth application that owns the session. If supplied, addedExternalUrls and removedExternalUrls are ignored. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_urls: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_urls: MaybeUndefined>, /// URLs of external resources to be added to this session. Only updatable by the OAuth application that owns the session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub added_external_urls: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_external_urls: MaybeUndefined>, /// URLs to be removed from this session. Only updatable by the OAuth application that owns the session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub removed_external_urls: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub removed_external_urls: MaybeUndefined>, /// A dynamically updated list of the agent's execution strategy. Only updatable by the OAuth application that owns the session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub plan: Option, - /// `Internal` The time the agent session was dismissed. Only updatable by internal clients. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub dismissed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub plan: MaybeUndefined, + /// `Internal` The time at which the agent session was dismissed. Set to null to un-dismiss. Only updatable by internal clients. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub dismissed_at: MaybeUndefined>, /// `Internal` User-specific state for the agent session. Only updatable by internal clients. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_state: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user_state: MaybeUndefined>, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AgentSessionUserStateInput { /// The ID of the user this state belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_id: Option, + pub user_id: String, /// The time at which the user most recently viewed the session. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_read_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_read_at: MaybeUndefined>, } +/// `Internal` AI prompt progress filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct AirbyteConfigurationInput { - /// Linear export API key. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub api_key: Option, +pub struct AiPromptProgressFilter { + /// Comparator for the identifier. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// Comparator for the created at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, + /// Comparator for the updated at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, + /// `Internal` Comparator for the AI prompt workflow type. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, + /// `Internal` Comparator for the AI prompt workflow status. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, + /// `Internal` Compound filters, all of which need to be matched by the AI prompt progress. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, + /// `Internal` Compound filters, one of which need to be matched by the AI prompt progress. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, +} +/// `Internal` Comparator for the AI prompt workflow status. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct AiPromptProgressStatusComparator { + /// Equals constraint. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, + /// Not-equals constraint. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, + /// In-array constraint. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, + /// Not-in-array constraint. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, + /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, } -/// Customer approximate need count sorting options. +/// `Internal` Filter for AI prompt progress subscription events. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct ApproximateNeedCountSort { - /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, - /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, +pub struct AiPromptProgressSubscriptionFilter { + /// `Internal` Filter by issue ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, + /// `Internal` Filter by comment ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comment_id: MaybeUndefined, + /// `Internal` Filter by pull request comment ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pull_request_comment_id: MaybeUndefined, + /// `Internal` Filter by prompt workflow type. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, + /// `Internal` Filter by prompt workflow status. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, } +/// `Internal` Comparator for the AI prompt workflow type. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct AsksWebPageCreateInput { - /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The identifier of the Asks web settings this page belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub asks_web_settings_id: Option, - /// The title of the page. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option, - /// The description of the page. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, - /// The auto-reply message for issue created. If not set, the default reply will be used. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_created_auto_reply: Option, - /// Whether the auto-reply for issue created is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_created_auto_reply_enabled: Option, - /// The auto-reply message for issue completed. If not set, the default reply will be used. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_completed_auto_reply: Option, - /// Whether the auto-reply for issue completed is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_completed_auto_reply_enabled: Option, - /// The auto-reply message for issue canceled. If not set, the default reply will be used. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_canceled_auto_reply: Option, - /// Whether the auto-reply for issue canceled is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_canceled_auto_reply_enabled: Option, -} -#[derive(Debug, Clone, Default, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct AsksWebPageUpdateInput { - /// The title of the page. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option, - /// The description of the page. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, - /// The auto-reply message for issue created. If not set, the default reply will be used. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_created_auto_reply: Option, - /// Whether the auto-reply for issue created is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_created_auto_reply_enabled: Option, - /// The auto-reply message for issue completed. If not set, the default reply will be used. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_completed_auto_reply: Option, - /// Whether the auto-reply for issue completed is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_completed_auto_reply_enabled: Option, - /// The auto-reply message for issue canceled. If not set, the default reply will be used. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_canceled_auto_reply: Option, - /// Whether the auto-reply for issue canceled is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_canceled_auto_reply_enabled: Option, -} -#[derive(Debug, Clone, Default, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct AsksWebSettingsCreateInput { - /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The custom domain for the Asks web form. If null, the default Linear-hosted domain will be used. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub domain: Option, +pub struct AiPromptTypeComparator { + /// Equals constraint. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, + /// Not-equals constraint. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, + /// In-array constraint. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, + /// Not-in-array constraint. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, + /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct AsksWebSettingsEmailIntakeAddressInput { - /// The sender name for outgoing emails. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sender_name: Option, - /// The email address for forwarding. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub forwarding_email_address: Option, +pub struct AirbyteConfigurationInput { + /// Linear export API key. + pub api_key: String, } +/// Customer approximate need count sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct AsksWebSettingsUpdateInput { - /// The custom domain for the Asks web form. If null, the default Linear-hosted domain will be used. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub domain: Option, +pub struct ApproximateNeedCountSort { + /// Whether nulls should be sorted first or last + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, + /// The order for the individual sort + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Issue assignee sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AssigneeSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Attachment collection filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AttachmentCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the title. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// Comparator for the subtitle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subtitle: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subtitle: MaybeUndefined, /// Comparator for the url. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub url: MaybeUndefined, /// Filters that the attachments creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Comparator for the source type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub source_type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub source_type: MaybeUndefined, /// Compound filters, all of which need to be matched by the attachment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the attachment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some attachments. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all attachments. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a new issue attachment. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AttachmentCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The attachment title. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option, + pub title: String, /// The attachment subtitle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subtitle: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subtitle: MaybeUndefined, /// Attachment location which is also used as an unique identifier for the attachment. If another attachment is created with the same `url` value, existing record is updated instead. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + pub url: String, /// The issue to associate the attachment with. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + pub issue_id: String, /// An icon url to display with the attachment. Should be of jpg or png format. Maximum of 1MB in size. Dimensions should be 20x20px for optimal display quality. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon_url: MaybeUndefined, /// Attachment metadata object with string and number values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub metadata: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub metadata: MaybeUndefined, /// Indicates if attachments for the same source application should be grouped in the Linear UI. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub group_by_source: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub group_by_source: MaybeUndefined, /// Create a linked comment with markdown body. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comment_body: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comment_body: MaybeUndefined, /// `Internal` Create a linked comment with Prosemirror body. Please use `commentBody` instead. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comment_body_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comment_body_data: MaybeUndefined, /// Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=application` mode. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub create_as_user: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub create_as_user: MaybeUndefined, } /// Attachment filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AttachmentFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the title. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// Comparator for the subtitle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subtitle: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subtitle: MaybeUndefined, /// Comparator for the url. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub url: MaybeUndefined, /// Filters that the attachments creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Comparator for the source type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub source_type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub source_type: MaybeUndefined, /// Compound filters, all of which need to be matched by the attachment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the attachment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for updating an existing issue attachment. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AttachmentUpdateInput { /// The attachment title. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option, + pub title: String, /// The attachment subtitle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subtitle: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subtitle: MaybeUndefined, /// Attachment metadata object with string and number values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub metadata: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub metadata: MaybeUndefined, /// An icon url to display with the attachment. Should be of jpg or png format. Maximum of 1MB in size. Dimensions should be 20x20px for optimal display quality. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon_url: MaybeUndefined, } /// Audit entry filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AuditEntryFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Comparator for the IP address. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ip: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ip: MaybeUndefined, /// Comparator for the country code. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub country_code: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub country_code: MaybeUndefined, /// Filters that the audit entry actor must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub actor: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub actor: MaybeUndefined, /// Compound filters, all of which need to be matched by the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Comparator for booleans. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct BooleanComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, } +/// A candidate code repository to consider when generating repository suggestions for an issue. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CandidateRepository { /// The full name of the repository in owner/name format (e.g., 'acme/backend'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub repository_full_name: Option, + pub repository_full_name: String, /// Hostname of the Git service (e.g., 'github.com', 'github.company.com'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub hostname: Option, + pub hostname: String, } /// Comment filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CommentCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the comment's body. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// Filters that the comment's creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user: MaybeUndefined>, /// Filters that the comment's issue must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue: MaybeUndefined>, /// Filters that the comment's project update must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update: MaybeUndefined>, /// Filters that the comment parent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Filters that the comment's document content must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub document_content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub document_content: MaybeUndefined>, + /// `Internal` Filters that the comment's project must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, + /// `Internal` Filters that the comment's initiative must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative: MaybeUndefined>, /// Filters that the comment's reactions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// Filters that the comment's customer needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// Compound filters, all of which need to be matched by the comment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the comment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some comments. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all comments. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a new comment. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CommentCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The comment content in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// `Internal` The comment content as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body_data: MaybeUndefined, /// The issue to associate the comment with. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, /// The project update to associate the comment with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update_id: MaybeUndefined, /// The initiative update to associate the comment with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_update_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_update_id: MaybeUndefined, /// The post to associate the comment with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub post_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub post_id: MaybeUndefined, /// The document content to associate the comment with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub document_content_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub document_content_id: MaybeUndefined, + /// `Internal` The project to associate the comment with. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, + /// `Internal` The initiative to associate the comment with. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// The parent comment under which to nest a current comment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, /// Create comment as a user with the provided name. This option is only available to OAuth applications creating comments in `actor=app` mode. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub create_as_user: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub create_as_user: MaybeUndefined, /// Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_icon_url: Option, - /// The date when the comment was created (e.g. if importing from another system). Must be a date in the past. If none is provided, the backend will generate the time as now. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_icon_url: MaybeUndefined, + /// The time at which the comment was created (e.g. if importing from another system). Must be a time in the past. If none is provided, the backend will generate the time as now. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined>, /// Flag to prevent auto subscription to the issue the comment is created on. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub do_not_subscribe_to_issue: Option, - /// Flag to indicate this comment should be created on the issue's synced Slack comment thread. If no synced Slack comment thread exists, the mutation will fail. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub create_on_synced_slack_thread: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub do_not_subscribe_to_issue: MaybeUndefined, + /// Flag to indicate this comment should be created on the issue's synced Slack comment thread. If no synced Slack comment thread exists, the mutation will fail. If there are multiple synced Slack threads on the issue, the oldest one will be targeted. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub create_on_synced_slack_thread: MaybeUndefined, /// The text that this comment references. Only defined for inline comments. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub quoted_text: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub quoted_text: MaybeUndefined, /// `INTERNAL` The identifiers of the users subscribing to this comment thread. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscriber_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscriber_ids: MaybeUndefined>, } /// Comment filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CommentFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the comment's body. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// Filters that the comment's creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user: MaybeUndefined>, /// Filters that the comment's issue must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue: MaybeUndefined>, /// Filters that the comment's project update must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update: MaybeUndefined>, /// Filters that the comment parent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Filters that the comment's document content must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub document_content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub document_content: MaybeUndefined>, + /// `Internal` Filters that the comment's project must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, + /// `Internal` Filters that the comment's initiative must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative: MaybeUndefined>, /// Filters that the comment's reactions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// Filters that the comment's customer needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// Compound filters, all of which need to be matched by the comment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the comment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for updating an existing comment. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CommentUpdateInput { /// The comment content. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// `Internal` The comment content as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body_data: MaybeUndefined, /// `INTERNAL` The user who resolved this thread. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub resolving_user_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub resolving_user_id: MaybeUndefined, /// `INTERNAL` The child comment that resolves this thread. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub resolving_comment_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub resolving_comment_id: MaybeUndefined, /// The text that this comment references. Only defined for inline comments. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub quoted_text: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub quoted_text: MaybeUndefined, /// `INTERNAL` The identifiers of the users subscribing to this comment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscriber_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscriber_ids: MaybeUndefined>, /// `INTERNAL` Flag to prevent auto subscription to the issue the comment is updated on. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub do_not_subscribe_to_issue: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub do_not_subscribe_to_issue: MaybeUndefined, } /// Issue completion date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CompletedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for submitting a support contact message from an authenticated user. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ContactCreateInput { - /// The type of support contact. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, - /// The message the user sent. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub message: Option, - /// User's operating system. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub operating_system: Option, - /// User's browser information. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub browser: Option, - /// User's device information. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub device: Option, - /// User's Linear client information. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub client_version: Option, - /// How disappointed the user would be if they could no longer use Linear. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub disappointment_rating: Option, -} -/// `INTERNAL` Input for sending a message to the Linear Sales team. + /// The type of support contact (e.g., bug report, feature request, general feedback). + pub r#type: String, + /// The feedback or support message submitted by the user. + pub message: String, + /// The user's operating system name and version (e.g., 'macOS 14.0'). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub operating_system: MaybeUndefined, + /// The user's browser name and version (e.g., 'Chrome 120'). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub browser: MaybeUndefined, + /// The user's device type or model information. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub device: MaybeUndefined, + /// The version of the Linear client application the user is running. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub client_version: MaybeUndefined, + /// How disappointed the user would be if they could no longer use Linear. Scale: 0 = not disappointed, 1 = somewhat disappointed, 2 = very disappointed, 3 = extremely disappointed. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub disappointment_rating: MaybeUndefined, +} +/// `INTERNAL` Input for submitting a sales or pricing inquiry to the Linear sales team. Small companies are routed to Intercom support, while larger companies are routed to HubSpot. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ContactSalesCreateInput { - /// Name of the person requesting information. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, - /// Work email of the person requesting information. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option, - /// Size of the company. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub company_size: Option, - /// The message the user sent. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub message: Option, - /// The URL this request was sent from. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, - /// PostHog distinct ID for analytics correlation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub distinct_id: Option, - /// Session ID for analytics correlation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub session_id: Option, + /// Full name of the person submitting the sales inquiry. + pub name: String, + /// Work email address of the person submitting the sales inquiry. + pub email: String, + /// The size of the inquiring company (e.g., '1-19', '20-99', '100-499'). Used to route the inquiry to the appropriate sales channel. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub company_size: MaybeUndefined, + /// An optional message from the user describing their needs or questions. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub message: MaybeUndefined, + /// The page URL from which the sales inquiry was submitted, for attribution tracking. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub url: MaybeUndefined, + /// PostHog distinct ID for correlating this inquiry with anonymous analytics events. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub distinct_id: MaybeUndefined, + /// PostHog session ID for correlating this inquiry with the user's browsing session. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub session_id: MaybeUndefined, } /// `Internal` Comparator for content. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ContentComparator { /// `Internal` Contains constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains: MaybeUndefined, /// `Internal` Not-contains constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_contains: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CreateOrganizationInput { /// The name of the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The URL key of the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url_key: Option, + pub url_key: String, /// Whether the organization should allow email domain access. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub domain_access: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub domain_access: MaybeUndefined, /// The timezone of the organization, passed in by client. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub timezone: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub timezone: MaybeUndefined, /// JSON serialized UTM parameters associated with the creation of the workspace. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub utm: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub utm: MaybeUndefined, } /// Issue creation date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CreatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for creating a new custom view. A name is required. Optionally scope the view to a team, project, or initiative. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomViewCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The description of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The icon of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, /// The color of the icon of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The id of the team associated with the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// The id of the project associated with the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// The id of the initiative associated with the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// The owner of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner_id: MaybeUndefined, /// The filter applied to issues in the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub filter_data: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub filter_data: MaybeUndefined, /// The project filter applied to issues in the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_filter_data: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_filter_data: MaybeUndefined, /// `ALPHA` The initiative filter applied to issues in the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_filter_data: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_filter_data: MaybeUndefined, /// The feed item filter applied to issues in the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub feed_item_filter_data: Option>, - /// Whether the custom view is shared with everyone in the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub shared: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub feed_item_filter_data: MaybeUndefined, + /// Whether the custom view is shared with everyone in the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub shared: MaybeUndefined, } /// Custom view creation date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomViewCreatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Custom view filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomViewFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the custom view name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the custom view model name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub model_name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub model_name: MaybeUndefined, /// Filters that the custom view's team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined, /// Filters that the custom view creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined, /// Comparator for whether the custom view is shared. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub shared: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub shared: MaybeUndefined, /// `INTERNAL` Filter based on whether the custom view has a facet. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_facet: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_facet: MaybeUndefined, /// Compound filters, all of which need to be matched by the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Custom view name sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomViewNameSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Custom view shared status sorting options. Ascending order puts shared views last. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomViewSharedSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomViewSortInput { /// Sort by custom view name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Sort by custom view creation date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Sort by custom view shared status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub shared: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub shared: MaybeUndefined, /// Sort by custom view update date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, } +/// Input for updating an existing custom view. All fields are optional; only provided fields will be updated. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomViewUpdateInput { /// The name of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The icon of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, /// The color of the icon of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The id of the team associated with the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// `Internal` The id of the project associated with the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// `Internal` The id of the initiative associated with the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// The owner of the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner_id: MaybeUndefined, /// The filter applied to issues in the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub filter_data: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub filter_data: MaybeUndefined, /// The project filter applied to issues in the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_filter_data: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_filter_data: MaybeUndefined, /// `ALPHA` The initiative filter applied to issues in the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_filter_data: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_filter_data: MaybeUndefined, /// The feed item filter applied to issues in the custom view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub feed_item_filter_data: Option>, - /// Whether the custom view is shared with everyone in the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub shared: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub feed_item_filter_data: MaybeUndefined, + /// Whether the custom view is shared with everyone in the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub shared: MaybeUndefined, } /// Custom view update date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomViewUpdatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Issue customer count sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerCountSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for creating a new customer in the workspace. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The name of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, - /// The domains associated with this customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub domains: Option>, - /// The ids of the customers in external systems. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_ids: Option>, - /// The ID of the Slack channel used to interact with the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_channel_id: Option, - /// The user who owns the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner_id: Option, - /// The status of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_id: Option, - /// The annual revenue generated by the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub revenue: Option, - /// The size of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub size: Option, - /// The tier of the customer customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub tier_id: Option, - /// The URL of the customer's logo. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub logo_url: Option, - /// The main source of the customer, for customers with multiple sources. Must be one of externalIds. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub main_source_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The display name of the customer organization. + pub name: String, + /// The email domains associated with this customer (e.g., 'acme.com'). Public email domains are not allowed. Defaults to an empty array. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub domains: MaybeUndefined>, + /// Identifiers for this customer in external systems (e.g., CRM IDs). Defaults to an empty array. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_ids: MaybeUndefined>, + /// The ID of the Slack channel to link to this customer. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_channel_id: MaybeUndefined, + /// The identifier of the user to assign as the owner of the customer. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner_id: MaybeUndefined, + /// The identifier of the customer status to set. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_id: MaybeUndefined, + /// The annual revenue generated by the customer, in dollars. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub revenue: MaybeUndefined, + /// The size of the customer organization (e.g., number of employees). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub size: MaybeUndefined, + /// The identifier of the customer tier to assign. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub tier_id: MaybeUndefined, + /// The URL of the customer's logo image. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub logo_url: MaybeUndefined, + /// The primary external source ID for customers with multiple sources. Must be one of the values provided in externalIds. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub main_source_id: MaybeUndefined, } /// Customer creation date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerCreatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Customer filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the customer name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the customer slack channel ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_channel_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_channel_id: MaybeUndefined, /// Comparator for the customer's domains. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub domains: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub domains: MaybeUndefined, /// Comparator for the customer's external IDs. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_ids: MaybeUndefined, /// Filters that the customer owner must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined, /// Filters that the customer's needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined, /// Comparator for the customer generated revenue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub revenue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub revenue: MaybeUndefined, /// Comparator for the customer size. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub size: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub size: MaybeUndefined, /// Filters that the customer's status must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, /// Filters that the customer's tier must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub tier: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub tier: MaybeUndefined, /// Compound filters, all of which need to be matched by the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Issue customer important count sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerImportantCountSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Customer needs filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerNeedCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the customer need priority. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Filters that the need's project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Filters that the need's issue must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue: MaybeUndefined>, /// Filters that the need's comment must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comment: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comment: MaybeUndefined>, /// Filters that the need's customer must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer: MaybeUndefined>, /// Compound filters, all of which need to be matched by the customer needs. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the customer needs. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some customer needs. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all customer needs. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a customer need from an existing issue attachment. If the attachment already has an archived need, it will be unarchived instead. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerNeedCreateFromAttachmentInput { - /// The attachment this need is created from. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub attachment_id: Option, + /// The UUID of the existing issue attachment to create a customer need from. + pub attachment_id: String, } +/// Input for creating a customer need linked to an issue or project. Either issueId or projectId must be provided. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerNeedCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The uuid of the customer the need belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_id: Option, - /// The external ID of the customer the need belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_external_id: Option, - /// The issue this need is referencing. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, - /// `INTERNAL` The project this need is referencing. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, - /// The comment this need is referencing. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comment_id: Option, - /// The attachment this need is referencing. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub attachment_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The UUID of the customer this need belongs to. Cannot be used together with customerExternalId. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_id: MaybeUndefined, + /// The external system ID of the customer this need belongs to. Cannot be used together with customerId. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_external_id: MaybeUndefined, + /// The issue to link this need to. Accepts a UUID or issue identifier (e.g., 'LIN-123'). Either issueId or projectId must be provided. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, + /// `INTERNAL` The project to link this need to. Either issueId or projectId must be provided. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, + /// The UUID of an existing comment to associate with this need for additional context. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comment_id: MaybeUndefined, + /// The UUID of an existing attachment to associate with this need as its source. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub attachment_id: MaybeUndefined, /// Whether the customer need is important or not. 0 = Not important, 1 = Important. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option, - /// The content of the need in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option, - /// `Internal` The content of the need as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body_data: Option, - /// Optional URL for the attachment associated with the customer need. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub attachment_url: Option, - /// Create need as a user with the provided name. This option is only available to OAuth applications creating needs in `actor=app` mode. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub create_as_user: Option, - /// Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating needs in `actor=app` mode. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_icon_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, + /// The body content of the need in Markdown format. Cannot be used together with bodyData. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, + /// `Internal` The body content of the need as a Prosemirror document JSON string. Cannot be used together with body. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body_data: MaybeUndefined, + /// A URL to create an attachment from and associate with this customer need as its source. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub attachment_url: MaybeUndefined, + /// Create the need attributed to an external user with the provided name. This option is only available to OAuth applications creating needs in `actor=app` mode. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub create_as_user: MaybeUndefined, + /// Avatar URL for the external user specified in `createAsUser`. Can only be used in conjunction with `createAsUser`. This option is only available to OAuth applications creating needs in `actor=app` mode. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_icon_url: MaybeUndefined, } /// Customer filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerNeedFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the customer need priority. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Filters that the need's project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Filters that the need's issue must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue: MaybeUndefined>, /// Filters that the need's comment must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comment: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comment: MaybeUndefined>, /// Filters that the need's customer must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer: MaybeUndefined>, /// Compound filters, all of which need to be matched by the customer need. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the customer need. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for updating a customer need. Supports reassigning the customer, moving to a different issue or project, changing priority, and updating body content. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerNeedUpdateInput { - /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The uuid of the customer the need belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_id: Option, - /// The external ID of the customer the need belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_external_id: Option, - /// The issue this need is referencing. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, - /// `INTERNAL` The project this need is referencing. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + /// An optional identifier in UUID v4 format. If provided, will be set as the customer need's ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The UUID of the customer to reassign this need to. Cannot be used together with customerExternalId. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_id: MaybeUndefined, + /// The external system ID of the customer to reassign this need to. Cannot be used together with customerId. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_external_id: MaybeUndefined, + /// The issue to move this need to. Accepts a UUID or issue identifier (e.g., 'LIN-123'). The need's attachment will also be moved to the target issue. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, + /// `INTERNAL` The project to move this need to. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// Whether the customer need is important or not. 0 = Not important, 1 = Important. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option, - /// Whether to also update the priority of needs from the same customer on the same issue/project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub apply_priority_to_related_needs: Option, - /// The content of the need in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option, - /// `Internal` The content of the need as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body_data: Option, - /// Optional URL for the attachment associated with the customer need. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub attachment_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, + /// When true and priority is also set, applies the same priority update to all other needs from the same customer on the same issue or project. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub apply_priority_to_related_needs: MaybeUndefined, + /// The updated body content of the need in Markdown format. Set to null to clear the body. Cannot be used together with bodyData. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, + /// `Internal` The updated body content of the need as a Prosemirror document JSON string. Set to null to clear the body. Cannot be used together with body. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body_data: MaybeUndefined, + /// A URL to create a new attachment from and set as the source for this customer need. Replaces any existing manually-added attachment. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub attachment_url: MaybeUndefined, } /// Issue customer revenue sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerRevenueSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Issue customer sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Customer sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerSortInput { /// Sort by name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Sort by customer creation date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Sort by owner name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined, /// Sort by customer status - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, /// Sort by customer generated revenue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub revenue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub revenue: MaybeUndefined, /// Sort by customer size - #[serde(default, skip_serializing_if = "Option::is_none")] - pub size: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub size: MaybeUndefined, /// Sort by customer tier - #[serde(default, skip_serializing_if = "Option::is_none")] - pub tier: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub tier: MaybeUndefined, /// Sort by approximate customer need count - #[serde(default, skip_serializing_if = "Option::is_none")] - pub approximate_need_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub approximate_need_count: MaybeUndefined, } +/// Input for creating a customer status in the workspace's customer lifecycle flow. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerStatusCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The name of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, - /// The UI color of the status as a HEX string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, - /// Description of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, - /// The position of the status in the workspace's customer flow. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, - /// The display name of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The internal name of the status. At least one of name or displayName must be provided. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// The color of the status indicator in the UI, as a HEX string (e.g., '#ff0000'). + pub color: String, + /// An optional description explaining what this status represents. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// The sort position of the status in the workspace's customer lifecycle flow. If omitted or colliding, a position is automatically assigned at the end. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, + /// The user-facing display name of the status. At least one of name or displayName must be provided. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, } /// Customer status filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerStatusFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the customer status name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the customer status description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// Comparator for the customer status position. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, /// Comparator for the customer status type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Comparator for the customer status color. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// Compound filters, all of which need to be matched by the customer status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which needs to be matched by the customer status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Customer status sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerStatusSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for updating an existing customer status. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerStatusUpdateInput { - /// The name of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, - /// The UI color of the status as a HEX string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, - /// Description of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, - /// The position of the status in the workspace's customer flow. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, - /// The display name of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option, -} + /// The updated internal name of the status. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// The updated color of the status indicator in the UI, as a HEX string. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, + /// The updated description of the status. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// The updated sort position of the status in the workspace's customer lifecycle flow. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, + /// The updated user-facing display name of the status. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, +} +/// Input for creating a customer tier in the workspace's customer tier ordering. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerTierCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The name of the tier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, - /// The UI color of the tier as a HEX string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, - /// Description of the tier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, - /// The position of the tier in the workspace's customer flow. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, - /// The display name of the tier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The internal name of the tier. Must be unique within the workspace. At least one of name or displayName must be provided. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// The color of the tier indicator in the UI, as a HEX string (e.g., '#ff0000'). + pub color: String, + /// An optional description explaining what this tier represents. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// The sort position of the tier in the workspace's customer tier ordering. If omitted or colliding, a position is automatically assigned at the end. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, + /// The user-facing display name of the tier. At least one of name or displayName must be provided. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, } /// Customer tier filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerTierFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the customer tier display name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, /// Comparator for the customer tier description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// Comparator for the customer tier position. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, /// Comparator for the customer tier color. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// Compound filters, all of which need to be matched by the customer tier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which needs to be matched by the customer tier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for updating an existing customer tier. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerTierUpdateInput { - /// The name of the tier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, - /// The UI color of the tier as a HEX string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, - /// Description of the tier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, - /// The position of the tier in the workspace's customer flow. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, - /// The display name of the tier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option, -} + /// The updated internal name of the tier. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// The updated color of the tier indicator in the UI, as a HEX string. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, + /// The updated description of the tier. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// The updated sort position of the tier in the workspace's customer tier ordering. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, + /// The updated user-facing display name of the tier. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, +} +/// Input for updating an existing customer. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerUpdateInput { - /// The name of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, - /// The domains associated with this customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub domains: Option>, - /// The ids of the customers in external systems. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_ids: Option>, - /// The ID of the Slack channel used to interact with the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_channel_id: Option, - /// The user who owns the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner_id: Option, - /// The status of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_id: Option, - /// The annual revenue generated by the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub revenue: Option, - /// The size of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub size: Option, - /// The tier of the customer customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub tier_id: Option, - /// The URL of the customer's logo. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub logo_url: Option, - /// The main source of the customer, for customers with multiple sources. Must be one of externalIds. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub main_source_id: Option, -} + /// The updated name of the customer. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// The updated list of email domains associated with this customer. Replaces the existing domains. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub domains: MaybeUndefined>, + /// The updated list of external system identifiers for this customer. New IDs will be appended with source metadata. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_ids: MaybeUndefined>, + /// The ID of the Slack channel to link to this customer. Set to null to unlink the current channel. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_channel_id: MaybeUndefined, + /// The identifier of the user to assign as the owner of the customer. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner_id: MaybeUndefined, + /// The identifier of the customer status to set. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_id: MaybeUndefined, + /// The annual revenue generated by the customer, in dollars. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub revenue: MaybeUndefined, + /// The size of the customer organization (e.g., number of employees). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub size: MaybeUndefined, + /// The identifier of the customer tier to assign. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub tier_id: MaybeUndefined, + /// The URL of the customer's logo image. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub logo_url: MaybeUndefined, + /// The primary external source ID for customers with multiple sources. Must be one of the values in externalIds. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub main_source_id: MaybeUndefined, +} +/// Input for upserting a customer. Matches against existing customers using id, externalId, slackChannelId, or domains. Creates a new customer if no match is found. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CustomerUpsertInput { - /// The identifier in UUID v4 format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The name of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, - /// The domains associated with this customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub domains: Option>, - /// The id of the customers in external systems. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_id: Option, - /// The ID of the Slack channel used to interact with the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_channel_id: Option, - /// The user who owns the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner_id: Option, - /// The status of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_id: Option, - /// The annual revenue generated by the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub revenue: Option, - /// The size of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub size: Option, - /// The tier of the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub tier_id: Option, - /// The URL of the customer's logo. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub logo_url: Option, - /// The name tier of the customer. Will be created if doesn't exist - #[serde(default, skip_serializing_if = "Option::is_none")] - pub tier_name: Option, -} + /// The identifier in UUID v4 format. Used to match an existing customer for upsert. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The name of the customer. Required when creating a new customer. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// The email domains associated with this customer. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub domains: MaybeUndefined>, + /// An external system identifier for this customer. Used for matching existing customers during upsert. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_id: MaybeUndefined, + /// The ID of the Slack channel to link to this customer. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_channel_id: MaybeUndefined, + /// The identifier of the user to assign as the owner of the customer. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner_id: MaybeUndefined, + /// The identifier of the customer status to set. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_id: MaybeUndefined, + /// The annual revenue generated by the customer, in dollars. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub revenue: MaybeUndefined, + /// The size of the customer organization (e.g., number of employees). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub size: MaybeUndefined, + /// The identifier of the customer tier to assign. Cannot be used together with tierName. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub tier_id: MaybeUndefined, + /// The URL of the customer's logo image. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub logo_url: MaybeUndefined, + /// The name of the customer tier to assign. A new tier will be created if one with this name does not exist. Cannot be used together with tierId. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub tier_name: MaybeUndefined, +} +/// Input for creating a new cycle. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CycleCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The custom name of the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The team to associate the cycle with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, - /// The start date of the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_at: Option>, - /// The end date of the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ends_at: Option>, + pub team_id: String, + /// The start time of the cycle. + pub starts_at: chrono::DateTime, + /// The end time of the cycle. + pub ends_at: chrono::DateTime, /// The completion time of the cycle. If null, the cycle hasn't been completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined>, } /// Cycle filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CycleFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the cycle number. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub number: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub number: MaybeUndefined, /// Comparator for the cycle name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the cycle start date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_at: MaybeUndefined, /// Comparator for the cycle ends at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ends_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ends_at: MaybeUndefined, /// Comparator for the cycle completed at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the filtering active cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_active: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_active: MaybeUndefined, /// Comparator for filtering for whether the cycle is currently in cooldown. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_in_cooldown: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_in_cooldown: MaybeUndefined, /// Comparator for the filtering next cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_next: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_next: MaybeUndefined, /// Comparator for the filtering previous cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_previous: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_previous: MaybeUndefined, /// Comparator for the filtering future cycles. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_future: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_future: MaybeUndefined, /// Comparator for the filtering past cycles. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_past: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_past: MaybeUndefined, /// Filters that the cycles team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined>, /// Filters that the cycles issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issues: MaybeUndefined>, /// Comparator for the inherited cycle ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inherited_from_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherited_from_id: MaybeUndefined, /// Compound filters, all of which need to be matched by the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Comparator for period when issue was added to a cycle. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CyclePeriodComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, } -/// Input for shifting all cycles from a certain cycle onwards by a certain number of days +/// Input for shifting all cycles from a certain cycle onwards by a certain number of days. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CycleShiftAllInput { /// The cycle ID at which to start the shift. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + pub id: String, /// The number of days to shift the cycles by. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub days_to_shift: Option, + pub days_to_shift: f64, } /// Issue cycle sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CycleSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, /// When set to true, cycles will be ordered with a custom order. Current cycle comes first, followed by upcoming cycles in ASC order, followed by previous cycles in DESC order. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub current_cycle_first: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub current_cycle_first: MaybeUndefined, } +/// Input for updating an existing cycle. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CycleUpdateInput { /// The custom name of the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, - /// The start date of the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_at: Option>, - /// The end date of the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ends_at: Option>, - /// The end date of the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// The start time of the cycle. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_at: MaybeUndefined>, + /// The end time of the cycle. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ends_at: MaybeUndefined>, + /// The completion time of the cycle. If null, the cycle hasn't been completed. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined>, } /// Comparator for dates. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DateComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Less-than constraint. Matches any values that are less than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lt: MaybeUndefined, /// Less-than-or-equal constraint. Matches any values that are less than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lte: MaybeUndefined, /// Greater-than constraint. Matches any values that are greater than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gt: MaybeUndefined, /// Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gte: MaybeUndefined, } /// Issue delegate sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DelegateSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for confirming workspace deletion with a verification code. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DeleteOrganizationInput { /// The deletion code to confirm operation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub deletion_code: Option, -} -/// Document content history filtering options. -#[derive(Debug, Clone, Default, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct DocumentContentHistoryFilter { - /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, - /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, - /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + pub deletion_code: String, } +/// Input for creating a new document. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DocumentCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The title of the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option, + pub title: String, /// The icon of the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, /// The color of the icon. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The document content as markdown. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub content: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub content: MaybeUndefined, /// Related project for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// `Internal` Related initiative for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// `Internal` Related team for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// Related issue for the document. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, /// `Internal` Related release for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub release_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_id: MaybeUndefined, /// `Internal` Related cycle for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_id: MaybeUndefined, /// `Internal` The resource folder containing the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub resource_folder_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub resource_folder_id: MaybeUndefined, /// The ID of the last template applied to the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template_id: MaybeUndefined, /// The order of the item in the resources list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// `INTERNAL` The identifiers of the users subscribing to this document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscriber_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscriber_ids: MaybeUndefined>, } /// Document filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DocumentFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the document title. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// Comparator for the document slug ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// Filters that the document's creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the document's project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Filters that the document's issue must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue: MaybeUndefined>, /// Filters that the document's initiative must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative: MaybeUndefined>, + /// Filters that the document's cycle must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle: MaybeUndefined>, + /// Filters that the document's release must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release: MaybeUndefined>, /// Compound filters, all of which need to be matched by the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for updating an existing document. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DocumentUpdateInput { /// The title of the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// The icon of the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, /// The color of the icon. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The document content as markdown. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub content: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub content: MaybeUndefined, /// Related project for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// `Internal` Related initiative for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// `Internal` Related team for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// Related issue for the document. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, /// `Internal` Related release for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub release_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_id: MaybeUndefined, /// `Internal` Related cycle for the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_id: MaybeUndefined, /// `Internal` The resource folder containing the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub resource_folder_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub resource_folder_id: MaybeUndefined, /// The ID of the last template applied to the document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template_id: Option, - /// The time at which the document was hidden. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub hidden_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template_id: MaybeUndefined, + /// The time at which the document was hidden. Set to null to unhide. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub hidden_at: MaybeUndefined>, /// The order of the item in the resources list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, - /// Whether the document has been trashed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub trashed: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, + /// Whether the document has been trashed. Set to true to trash, or null to restore from trash. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub trashed: MaybeUndefined, /// `INTERNAL` The identifiers of the users subscribing to this document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscriber_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscriber_ids: MaybeUndefined>, } /// Issue due date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DueDateSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for creating a new email intake address. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EmailIntakeAddressCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The type of the email address. If not provided, the backend will default to team or template. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// The email address used to forward emails to the intake address. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub forwarding_email_address: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub forwarding_email_address: MaybeUndefined, /// The name to be used for outgoing emails. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sender_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sender_name: MaybeUndefined, /// The identifier or key of the team this email address will intake issues for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// The identifier of the template this email address will intake issues for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub template_id: MaybeUndefined, /// Whether email replies are enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub replies_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub replies_enabled: MaybeUndefined, /// Whether the commenter's name is included in the email replies. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub use_user_names_in_replies: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub use_user_names_in_replies: MaybeUndefined, /// Whether the issue created auto-reply is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_created_auto_reply_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_created_auto_reply_enabled: MaybeUndefined, /// The auto-reply message for issue created. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_created_auto_reply: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_created_auto_reply: MaybeUndefined, /// Whether the issue completed auto-reply is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_completed_auto_reply_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_completed_auto_reply_enabled: MaybeUndefined, /// The auto-reply message for issue completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_completed_auto_reply: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_completed_auto_reply: MaybeUndefined, /// Whether the issue canceled auto-reply is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_canceled_auto_reply_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_canceled_auto_reply_enabled: MaybeUndefined, /// The auto-reply message for issue canceled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_canceled_auto_reply: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_canceled_auto_reply: MaybeUndefined, /// Whether customer requests are enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_requests_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_requests_enabled: MaybeUndefined, + /// Whether to reopen completed or canceled issues when a substantive email reply is received. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reopen_on_reply: MaybeUndefined, } +/// Input for updating an existing email intake address. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EmailIntakeAddressUpdateInput { /// Whether the email address is currently enabled. If set to false, the email address will be disabled and no longer accept incoming emails. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enabled: MaybeUndefined, /// The email address used to forward emails to the intake address. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub forwarding_email_address: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub forwarding_email_address: MaybeUndefined, /// The name to be used for outgoing emails. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sender_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sender_name: MaybeUndefined, /// The identifier or key of the team this email address will intake issues for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// The identifier of the template this email address will intake issues for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub template_id: MaybeUndefined, /// Whether email replies are enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub replies_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub replies_enabled: MaybeUndefined, /// Whether the commenter's name is included in the email replies. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub use_user_names_in_replies: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub use_user_names_in_replies: MaybeUndefined, /// Whether the issue created auto-reply is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_created_auto_reply_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_created_auto_reply_enabled: MaybeUndefined, /// The auto-reply message for issue created. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_created_auto_reply: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_created_auto_reply: MaybeUndefined, /// Whether the issue completed auto-reply is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_completed_auto_reply_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_completed_auto_reply_enabled: MaybeUndefined, /// Custom auto-reply message for issue completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_completed_auto_reply: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_completed_auto_reply: MaybeUndefined, /// Whether the issue canceled auto-reply is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_canceled_auto_reply_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_canceled_auto_reply_enabled: MaybeUndefined, /// Custom auto-reply message for issue canceled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_canceled_auto_reply: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_canceled_auto_reply: MaybeUndefined, /// Whether customer requests are enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_requests_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_requests_enabled: MaybeUndefined, + /// Whether to reopen completed or canceled issues when a substantive email reply is received. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reopen_on_reply: MaybeUndefined, } +/// Input for unsubscribing a user from a specific email notification type. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EmailUnsubscribeInput { /// Email type to unsubscribe from. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + pub r#type: String, /// The user's email validation token. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub token: Option, + pub token: String, /// The identifier of the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_id: Option, + pub user_id: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EmailUserAccountAuthChallengeInput { /// The email for which to generate the magic login code. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option, + pub email: String, /// Whether the login was requested from the desktop app. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_desktop: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_desktop: MaybeUndefined, /// Auth code for the client initiating the sequence. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub client_auth_code: Option, - /// The organization invite link to associate with this authentication. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub invite_link: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub client_auth_code: MaybeUndefined, + /// The workspace invite link to associate with this authentication. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub invite_link: MaybeUndefined, /// Whether to only return the login code. This is used by mobile apps to skip showing the login link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub login_code_only: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub login_code_only: MaybeUndefined, /// Response from the login challenge. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub challenge_response: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub challenge_response: MaybeUndefined, + /// PostHog session ID for attribution tracking. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub session_id: MaybeUndefined, } +/// Input for creating a new custom emoji. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EmojiCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the custom emoji. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The URL for the emoji. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + pub url: String, } +/// Input for creating a new external link on an entity. A URL, label, and exactly one parent entity (initiative, project, team, release, or cycle) are required. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EntityExternalLinkCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The URL of the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + pub url: String, /// The label for the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label: Option, + pub label: String, /// The initiative associated with the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// The project associated with the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// `Internal` The team associated with the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// `Internal` The release associated with the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub release_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_id: MaybeUndefined, /// `Internal` The cycle associated with the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_id: MaybeUndefined, /// `Internal` The resource folder containing the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub resource_folder_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub resource_folder_id: MaybeUndefined, /// The order of the item in the entities resources list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } +/// Input for updating an existing external link. All fields are optional; only provided fields will be updated. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EntityExternalLinkUpdateInput { /// The URL of the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub url: MaybeUndefined, /// The label for the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label: MaybeUndefined, /// The order of the item in the entities resources list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// `Internal` The resource folder containing the link. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub resource_folder_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub resource_folder_id: MaybeUndefined, } /// Comparator for estimates. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EstimateComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Less-than constraint. Matches any values that are less than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lt: MaybeUndefined, /// Less-than-or-equal constraint. Matches any values that are less than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lte: MaybeUndefined, /// Greater-than constraint. Matches any values that are greater than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gt: MaybeUndefined, /// Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gte: MaybeUndefined, /// Compound filters, all of which need to be matched by the estimate. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Compound filters, one of which need to be matched by the estimate. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, } /// Issue estimate sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EstimateSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for tracking an anonymous analytics event. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct EventTrackingInput { + /// The event name to track. + pub event: String, + /// Optional properties for the event. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub properties: MaybeUndefined, + /// Client session ID for PostHog session correlation. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub session_id: MaybeUndefined, +} +/// Input for creating a favorite. Exactly one target entity must be specified (e.g., issueId, projectId, customViewId, folderName, etc.). #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct FavoriteCreateInput { /// The identifier. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the favorite folder. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub folder_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub folder_name: MaybeUndefined, /// The parent folder of the favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, /// The identifier of the issue to favorite. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, /// The identifier of the facet to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub facet_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub facet_id: MaybeUndefined, /// The identifier of the project to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// The tab of the project to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_tab: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_tab: MaybeUndefined, /// The type of the predefined view to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub predefined_view_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub predefined_view_type: MaybeUndefined, /// The identifier of team for the predefined view to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub predefined_view_team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub predefined_view_team_id: MaybeUndefined, /// The identifier of the cycle to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_id: MaybeUndefined, /// The identifier of the custom view to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub custom_view_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub custom_view_id: MaybeUndefined, /// The identifier of the document to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub document_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub document_id: MaybeUndefined, /// `INTERNAL` The identifier of the initiative to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// The tab of the initiative to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_tab: Option, - /// The identifier of the label to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_tab: MaybeUndefined, /// The identifier of the label to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_label_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_id: MaybeUndefined, + /// The identifier of the project label to favorite. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_label_id: MaybeUndefined, /// The identifier of the user to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user_id: MaybeUndefined, /// The position of the item in the favorites list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The identifier of the customer to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_id: MaybeUndefined, /// The identifier of the dashboard to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub dashboard_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub dashboard_id: MaybeUndefined, /// The identifier of the pull request to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pull_request_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pull_request_id: MaybeUndefined, /// `ALPHA` The identifier of the release to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub release_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_id: MaybeUndefined, /// `ALPHA` The identifier of the release pipeline to favorite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub release_pipeline_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_pipeline_id: MaybeUndefined, } +/// Input for updating a favorite's position, parent folder, or folder name. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct FavoriteUpdateInput { /// The position of the item in the favorites list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The identifier (in UUID v4 format) of the folder to move the favorite under. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, /// The name of the favorite folder. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub folder_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub folder_name: MaybeUndefined, } /// Feed item filtering options #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct FeedItemFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Filters that the feed item author must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub author: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub author: MaybeUndefined, /// Comparator for the update type: initiative, project, team - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_type: MaybeUndefined, /// Comparator for the project or initiative update health: onTrack, atRisk, offTrack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_health: MaybeUndefined, /// Filters that the feed item's project update must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update: MaybeUndefined, /// Filters that the related feed item initiatives must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_initiatives: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub related_initiatives: MaybeUndefined, /// Filters that the related feed item team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_teams: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub related_teams: MaybeUndefined, /// Compound filters, all of which need to be matched by the feed item. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the feed item. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct FrontSettingsInput { /// Whether an internal message should be added when a Linear issue changes status (for status types except completed or canceled). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub send_note_on_status_change: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub send_note_on_status_change: MaybeUndefined, /// Whether an internal message should be added when someone comments on an issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub send_note_on_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub send_note_on_comment: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear issue is completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_completion: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_completion: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear issue is cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_cancellation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_cancellation: MaybeUndefined, /// Whether a ticket should be automatically reopened when a comment is posted on its linked Linear issue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_comment: MaybeUndefined, /// `ALPHA` Whether customer and customer requests should not be automatically created when conversations are linked to a Linear issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub disable_customer_requests_auto_creation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub disable_customer_requests_auto_creation: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear project is completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_project_completion: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_project_completion: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear project is cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_project_cancellation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_project_cancellation: MaybeUndefined, /// Whether Linear Agent should be enabled for this integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enable_ai_intake: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_ai_intake: MaybeUndefined, } -#[derive(Debug, Clone, Default, Serialize, Deserialize)] +/// Input for creating a new Git automation rule. +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitAutomationStateCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The team associated with the automation state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + pub team_id: String, /// The associated workflow state. If null, will override default behaviour and take no action. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state_id: MaybeUndefined, /// The associated target branch. If null, all branches are targeted. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_branch_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_branch_id: MaybeUndefined, /// The event that triggers the automation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub event: Option, + pub event: GitAutomationStates, } +/// Input for updating an existing Git automation rule. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitAutomationStateUpdateInput { /// The associated workflow state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state_id: MaybeUndefined, /// The associated target branch. If null, all branches are targeted. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_branch_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_branch_id: MaybeUndefined, /// The event that triggers the automation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub event: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub event: MaybeUndefined, } +/// Input for creating a new Git target branch definition. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitAutomationTargetBranchCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The team associated with the Git target branch automation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + pub team_id: String, /// The target branch pattern. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub branch_pattern: Option, + pub branch_pattern: String, /// Whether the branch pattern is a regular expression. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_regex: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_regex: MaybeUndefined, } +/// Input for updating an existing Git target branch definition. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitAutomationTargetBranchUpdateInput { /// The target branch pattern. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub branch_pattern: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub branch_pattern: MaybeUndefined, /// Whether the branch pattern is a regular expression. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_regex: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_regex: MaybeUndefined, } -#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitHubImportSettingsInput { /// The GitHub organization's name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub org_login: Option, + pub org_login: String, /// The avatar URL for the GitHub organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub org_avatar_url: Option, + pub org_avatar_url: String, /// The names of the repositories connected for the GitHub integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub repositories: Option>>, + pub repositories: Vec, /// A map storing all available issue labels per repository - #[serde(default, skip_serializing_if = "Option::is_none")] - pub labels: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub labels: MaybeUndefined, /// The type of Github org - #[serde(default, skip_serializing_if = "Option::is_none")] - pub org_type: Option, + pub org_type: GithubOrgType, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitHubPersonalSettingsInput { /// The GitHub user's name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub login: Option, + pub login: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitHubRepoInput { /// The GitHub repo id. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + pub id: f64, /// The full name of the repository. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub full_name: Option, + pub full_name: String, /// Whether the repository is archived. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub archived: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub archived: MaybeUndefined, + /// The external identifier (GitHub node ID) for the repository. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_id: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitHubRepoMappingInput { /// The unique identifier for this mapping. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + pub id: String, /// The Linear team id to map to the given project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub linear_team_id: Option, + pub linear_team_id: String, /// The GitHub repo id. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_hub_repo_id: Option, + pub git_hub_repo_id: f64, /// Labels to filter incoming GitHub issue creation by. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_hub_labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub git_hub_labels: MaybeUndefined>, /// Whether the sync for this mapping is bidirectional. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub bidirectional: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub bidirectional: MaybeUndefined, /// Whether this mapping is the default one for issue creation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitHubSettingsInput { - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pull_request_review_tool: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pull_request_review_tool: MaybeUndefined, /// The avatar URL for the GitHub organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub org_avatar_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub org_avatar_url: MaybeUndefined, /// The GitHub organization's name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub org_login: Option, + pub org_login: String, + /// The stable external identifier (GitHub node ID) for the organization. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_org_id: MaybeUndefined, /// The names of the repositories connected for the GitHub integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub repositories: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub repositories: MaybeUndefined>, /// Mapping of team to repository for syncing. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub repositories_mapping: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub repositories_mapping: MaybeUndefined>, /// The type of Github org - #[serde(default, skip_serializing_if = "Option::is_none")] - pub org_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub org_type: MaybeUndefined, /// Whether the integration has code access - #[serde(default, skip_serializing_if = "Option::is_none")] - pub code_access: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub code_access: MaybeUndefined, + /// The enterprise URL if this is a GitHub Enterprise Cloud integration. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enterprise_url: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GitLabSettingsInput { /// The self-hosted URL of the GitLab instance. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub url: MaybeUndefined, /// Whether the token is limited to a read-only scope. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub readonly: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub readonly: MaybeUndefined, /// The ISO timestamp the GitLab access token expires. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub expires_at: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub expires_at: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GongRecordingImportConfigInput { /// The team ID to create issues in for imported recordings. Set to null to disable import. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GongSettingsInput { /// Configuration for recording import. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub import_config: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub import_config: MaybeUndefined, + /// Whether to tag matching internal Gong call participants as user mentions in created issues. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub tag_participants_in_issues: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GoogleSheetsExportSettings { /// Whether the export is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enabled: MaybeUndefined, /// The ID of the exported Google Sheet. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub spreadsheet_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub spreadsheet_id: MaybeUndefined, /// The URL of the exported Google Sheet. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub spreadsheet_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub spreadsheet_url: MaybeUndefined, /// The ID of the target sheet (tab) within the Google Sheet. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sheet_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sheet_id: MaybeUndefined, /// The date of the most recent export. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined>, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GoogleSheetsSettingsInput { /// `Deprecated` The ID of the exported Google Sheet. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub spreadsheet_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub spreadsheet_id: MaybeUndefined, /// `Deprecated` The URL of the exported Google Sheet. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub spreadsheet_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub spreadsheet_url: MaybeUndefined, /// `Deprecated` The ID of the target sheet (tab) within the Google Sheet. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sheet_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sheet_id: MaybeUndefined, /// `Deprecated` The date of the most recent export. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_issues_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_issues_at: MaybeUndefined>, /// The export settings for issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue: MaybeUndefined, /// The export settings for projects. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined, /// The export settings for initiatives. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GoogleUserAccountAuthInput { /// Code returned from Google's OAuth flow. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub code: Option, + pub code: String, /// The URI to redirect the user to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub redirect_uri: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub redirect_uri: MaybeUndefined, /// The timezone of the user's browser. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub timezone: Option, - /// An optional invite link for an organization used to populate available organizations. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub invite_link: Option, + pub timezone: String, + /// An optional invite link for a workspace used to populate available workspaces. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub invite_link: MaybeUndefined, /// An optional parameter to disable new user signup and force login. Default: false. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub disallow_signup: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub disallow_signup: MaybeUndefined, + /// PostHog session ID for attribution tracking. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub session_id: MaybeUndefined, } /// Comparator for identifiers. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IDComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InheritanceEntityMapping { /// Mapping of the WorkflowState ID to the new WorkflowState ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub workflow_states: Option, + pub workflow_states: serde_json::Value, /// Mapping of the IssueLabel ID to the new IssueLabel name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_labels: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_labels: MaybeUndefined, } /// Initiative collection filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the initiative name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the initiative slug ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// Filters that the initiative creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Comparator for the initiative status: Planned, Active, Completed - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, /// Filters that the initiative teams must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub teams: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub teams: MaybeUndefined>, /// Filters that the initiative owner must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined>, /// Comparator for the initiative target date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, + /// Comparator for the initiative started at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub started_at: MaybeUndefined, + /// Comparator for the initiative completed at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the initiative health: onTrack, atRisk, offTrack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Comparator for the initiative health (with age): onTrack, atRisk, offTrack, outdated, noUpdate - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health_with_age: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health_with_age: MaybeUndefined, /// Comparator for the initiative activity type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub activity_type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub activity_type: MaybeUndefined, /// Filters that the initiative must be an ancestor of. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ancestors: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ancestors: MaybeUndefined>, + /// Filters that the initiative updates must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_updates: MaybeUndefined, /// Compound filters, all of which need to be matched by the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some initiatives. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all initiatives. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } /// The properties of the initiative to create. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The description of the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The owner of the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner_id: Option, - /// The sort order of the initiative within the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner_id: MaybeUndefined, + /// The sort order of the initiative within the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The initiative's color. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The initiative's icon. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, /// The initiative's status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, /// The estimated completion date of the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// The resolution of the initiative's estimated completion date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date_resolution: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date_resolution: MaybeUndefined, /// The initiative's content in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub content: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub content: MaybeUndefined, } /// Initiative creation date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeCreatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Initiative filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the initiative name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the initiative slug ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// Filters that the initiative creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Comparator for the initiative status: Planned, Active, Completed - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, /// Filters that the initiative teams must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub teams: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub teams: MaybeUndefined>, /// Filters that the initiative owner must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined>, /// Comparator for the initiative target date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, + /// Comparator for the initiative started at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub started_at: MaybeUndefined, + /// Comparator for the initiative completed at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the initiative health: onTrack, atRisk, offTrack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Comparator for the initiative health (with age): onTrack, atRisk, offTrack, outdated, noUpdate - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health_with_age: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health_with_age: MaybeUndefined, /// Comparator for the initiative activity type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub activity_type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub activity_type: MaybeUndefined, /// Filters that the initiative must be an ancestor of. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ancestors: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ancestors: MaybeUndefined>, + /// Filters that the initiative updates must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_updates: MaybeUndefined, /// Compound filters, all of which need to be matched by the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Initiative health sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeHealthSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Initiative health update date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeHealthUpdatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Initiative manual sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeManualSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Initiative name sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeNameSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Initiative owner sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeOwnerSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for creating a parent-child relationship between two initiatives. The initiativeId is the parent and the relatedInitiativeId is the child. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeRelationCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The identifier of the parent initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, - /// The identifier of the child initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_initiative_id: Option, - /// The sort order of the initiative relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The identifier of the parent initiative in the hierarchy. + pub initiative_id: String, + /// The identifier of the child initiative in the hierarchy. + pub related_initiative_id: String, + /// The sort order of the child initiative within its parent. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } -/// The properties of the initiativeRelation to update. +/// The properties of the initiative relation to update. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeRelationUpdateInput { - /// The sort order of the initiative relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + /// The sort order of the child initiative within its parent. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } /// Initiative sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeSortInput { /// Sort by initiative name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Sort by manual order. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub manual: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub manual: MaybeUndefined, /// Sort by initiative update date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Sort by initiative creation date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Sort by initiative target date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// Sort by initiative health status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Sort by initiative health update date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health_updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health_updated_at: MaybeUndefined, /// Sort by initiative owner name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined, } /// Initiative target date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeTargetDateSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// The properties of the initiativeToProject to create. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeToProjectCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The identifier of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + pub project_id: String, /// The identifier of the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, - /// The sort order for the project within its organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + pub initiative_id: String, + /// The sort order for the project within the initiative. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } -/// The properties of the initiativeToProject to update. +/// The properties of the initiative-to-project association to update. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeToProjectUpdateInput { - /// The sort order for the project within its organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + /// The sort order for the project within the initiative. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } +/// Input for creating a new initiative update. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeUpdateCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The content of the update in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// `Internal` The content of the update as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body_data: MaybeUndefined, /// The health of the initiative at the time of the update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// The initiative to associate the update with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + pub initiative_id: String, /// Whether the diff between the current update and the previous one should be hidden. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_diff_hidden: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_diff_hidden: MaybeUndefined, } /// Options for filtering initiative updates. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeUpdateFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Filters that the initiative update creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user: MaybeUndefined, /// Filters that the initiative update initiative must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative: MaybeUndefined, /// Filters that the initiative updates reactions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// Compound filters, all of which need to be matched by the InitiativeUpdate. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the InitiativeUpdate. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// The properties of the initiative to update. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeUpdateInput { /// The name of the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The owner of the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner_id: Option, - /// The sort order of the initiative within the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner_id: MaybeUndefined, + /// The sort order of the initiative within the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The initiative's color. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The initiative's icon. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, - /// The estimated completion date of the initiative. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, + /// The estimated completion date of the initiative. Set to null to clear. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// The initiative's status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, /// The resolution of the initiative's estimated completion date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date_resolution: Option, - /// Whether the initiative has been trashed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub trashed: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date_resolution: MaybeUndefined, + /// Whether the initiative has been trashed. Set to true to trash, or null to restore. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub trashed: MaybeUndefined, /// The initiative's content in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub content: Option, - /// The n-weekly frequency at which to prompt for updates. When not set, reminders are inherited from workspace. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_reminder_frequency_in_weeks: Option, - /// The frequency at which to prompt for updates. When not set, reminders are inherited from workspace. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_reminder_frequency: Option, - /// The frequency resolution. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub frequency_resolution: Option, - /// The day at which to prompt for updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_reminders_day: Option, - /// The hour at which to prompt for updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_reminders_hour: Option, -} + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub content: MaybeUndefined, + /// The n-weekly frequency at which to prompt for initiative updates. When not set, reminders are inherited from workspace settings. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_reminder_frequency_in_weeks: MaybeUndefined, + /// The frequency at which to prompt for initiative updates. When not set, reminders are inherited from workspace settings. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_reminder_frequency: MaybeUndefined, + /// The resolution type for the update reminder frequency (e.g., weekly, biweekly). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub frequency_resolution: MaybeUndefined, + /// The day of the week on which to prompt for initiative updates. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_reminders_day: MaybeUndefined, + /// The hour of the day (0-23) at which to prompt for initiative updates. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_reminders_hour: MaybeUndefined, +} +/// Input for updating an existing initiative update. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeUpdateUpdateInput { /// The content of the update in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// The content of the update as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body_data: MaybeUndefined, /// The health of the initiative at the time of the update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Whether the diff between the current update and the previous one should be hidden. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_diff_hidden: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_diff_hidden: MaybeUndefined, } /// Initiative update date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct InitiativeUpdatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, +} +/// Collection filtering options for filtering initiatives by initiative updates. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct InitiativeUpdatesCollectionFilter { + /// Comparator for the identifier. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// Comparator for the created at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, + /// Comparator for the updated at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, + /// Compound filters, all of which need to be matched by the initiative update. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, + /// Compound filters, one of which need to be matched by the update. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, + /// Filters that needs to be matched by some initiative updates. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined, + /// Filters that needs to be matched by all initiative updates. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined, + /// Comparator for the collection length. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, +} +/// Options for filtering initiatives by initiative updates. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct InitiativeUpdatesFilter { + /// Comparator for the identifier. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// Comparator for the created at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, + /// Comparator for the updated at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, + /// Compound filters, all of which need to be matched by the initiative updates. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, + /// Compound filters, one of which need to be matched by the initiative updates. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IntegrationCustomerDataAttributesRefreshInput { /// The integration service to refresh customer data attributes from. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub service: Option, + pub service: String, } +/// Input for requesting a currently unavailable integration. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IntegrationRequestInput { /// Email associated with the request. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub email: MaybeUndefined, /// Name of the requested integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IntegrationSettingsInput { - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_asks: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_post: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_project_post: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_initiative_post: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_custom_view_notifications: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_org_project_updates_post: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_org_initiative_updates_post: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub google_sheets: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_hub: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_hub_import: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_hub_personal: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_lab: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sentry: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub zendesk: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub intercom: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub front: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gong: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub microsoft_teams: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub jira: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub notion: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub opsgenie: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pager_duty: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub launch_darkly: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub jira_personal: Option>, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub salesforce: Option>, -} + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_asks: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_post: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_post: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_initiative_post: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_custom_view_notifications: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_org_project_updates_post: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_org_initiative_updates_post: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub google_sheets: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub git_hub: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub git_hub_import: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub git_hub_personal: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub git_lab: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sentry: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub zendesk: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub intercom: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub front: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gong: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub microsoft_teams: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub microsoft_teams_project_post: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub jira: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub notion: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub opsgenie: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pager_duty: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub launch_darkly: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub jira_personal: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub salesforce: MaybeUndefined, +} +/// Input for creating a new integration template. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IntegrationTemplateCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The identifier of the integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub integration_id: Option, + pub integration_id: String, /// The identifier of the template. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub template_id: Option, + pub template_id: String, /// The foreign identifier in the other service. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub foreign_entity_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub foreign_entity_id: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IntegrationUpdateInput { /// The settings to update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub settings: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub settings: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IntegrationsSettingsCreateInput { /// Whether to send a Slack message when a new issue is created for the project or the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_created: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_created: MaybeUndefined, /// Whether to send a Slack message when an issue is added to a view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_added_to_view: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_added_to_view: MaybeUndefined, /// Whether to send a Slack message when a comment is created on any of the project or team's issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_new_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_new_comment: MaybeUndefined, /// Whether to send a Slack message when any of the project or team's issues change to completed or cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_status_changed_done: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_status_changed_done: MaybeUndefined, /// Whether to send a Slack message when any of the project or team's issues has a change in status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_status_changed_all: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_status_changed_all: MaybeUndefined, /// Whether to send a Slack message when a project update is created. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_project_update_created: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_update_created: MaybeUndefined, + /// Whether to send a Microsoft Teams message when a project update is created. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub microsoft_teams_project_update_created: MaybeUndefined, /// Whether to send a Slack message when a project update is created to team channels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_project_update_created_to_team: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_update_created_to_team: MaybeUndefined, /// Whether to send a Slack message when a project update is created to workspace channel. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_project_update_created_to_workspace: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_update_created_to_workspace: MaybeUndefined, /// Whether to send a Slack message when an initiative update is created. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_initiative_update_created: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_initiative_update_created: MaybeUndefined, /// Whether to send a Slack message when a new issue is added to triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_added_to_triage: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_added_to_triage: MaybeUndefined, /// Whether to send a Slack message when an SLA is at high risk. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_sla_high_risk: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_sla_high_risk: MaybeUndefined, /// Whether to receive notification when an SLA has breached on Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_sla_breached: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_sla_breached: MaybeUndefined, /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The identifier of the team to create settings for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// The identifier of the project to create settings for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// The identifier of the initiative to create settings for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// The identifier of the custom view to create settings for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub custom_view_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub custom_view_id: MaybeUndefined, /// The type of view to which the integration settings context is associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub context_view_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub context_view_type: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IntegrationsSettingsUpdateInput { /// Whether to send a Slack message when a new issue is created for the project or the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_created: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_created: MaybeUndefined, /// Whether to send a Slack message when an issue is added to a view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_added_to_view: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_added_to_view: MaybeUndefined, /// Whether to send a Slack message when a comment is created on any of the project or team's issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_new_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_new_comment: MaybeUndefined, /// Whether to send a Slack message when any of the project or team's issues change to completed or cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_status_changed_done: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_status_changed_done: MaybeUndefined, /// Whether to send a Slack message when any of the project or team's issues has a change in status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_status_changed_all: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_status_changed_all: MaybeUndefined, /// Whether to send a Slack message when a project update is created. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_project_update_created: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_update_created: MaybeUndefined, + /// Whether to send a Microsoft Teams message when a project update is created. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub microsoft_teams_project_update_created: MaybeUndefined, /// Whether to send a Slack message when a project update is created to team channels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_project_update_created_to_team: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_update_created_to_team: MaybeUndefined, /// Whether to send a Slack message when a project update is created to workspace channel. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_project_update_created_to_workspace: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_update_created_to_workspace: MaybeUndefined, /// Whether to send a Slack message when an initiative update is created. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_initiative_update_created: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_initiative_update_created: MaybeUndefined, /// Whether to send a Slack message when a new issue is added to triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_added_to_triage: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_added_to_triage: MaybeUndefined, /// Whether to send a Slack message when an SLA is at high risk. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_sla_high_risk: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_sla_high_risk: MaybeUndefined, /// Whether to receive notification when an SLA has breached on Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_sla_breached: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_sla_breached: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IntercomSettingsInput { /// Whether an internal message should be added when a Linear issue changes status (for status types except completed or canceled). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub send_note_on_status_change: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub send_note_on_status_change: MaybeUndefined, /// Whether an internal message should be added when someone comments on an issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub send_note_on_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub send_note_on_comment: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear issue is completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_completion: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_completion: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear issue is cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_cancellation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_cancellation: MaybeUndefined, /// Whether a ticket should be automatically reopened when a comment is posted on its linked Linear issue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_comment: MaybeUndefined, /// `ALPHA` Whether customer and customer requests should not be automatically created when conversations are linked to a Linear issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub disable_customer_requests_auto_creation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub disable_customer_requests_auto_creation: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear project is completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_project_completion: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_project_completion: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear project is cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_project_cancellation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_project_cancellation: MaybeUndefined, /// Whether Linear Agent should be enabled for this integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enable_ai_intake: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_ai_intake: MaybeUndefined, } +/// Input for creating multiple issues at once in a batch operation. Up to 50 issues can be created in a single batch. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueBatchCreateInput { /// The issues to create. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>>, + pub issues: Vec, } /// Issue filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the issues number. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub number: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub number: MaybeUndefined, /// Comparator for the issues title. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// Comparator for the issues description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option>, - /// Comparator for the issues priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// Comparator for the issues priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Comparator for the issues estimate. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub estimate: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub estimate: MaybeUndefined, /// Comparator for the issues started at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub started_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub started_at: MaybeUndefined, /// Comparator for the issues triaged at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub triaged_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub triaged_at: MaybeUndefined, /// Comparator for the issues completed at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the issues canceled at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub canceled_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub canceled_at: MaybeUndefined, + /// Comparator for the issue's SLA breach date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_breaches_at: MaybeUndefined, /// Comparator for the issues archived at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub archived_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub archived_at: MaybeUndefined, /// Comparator for the issues auto closed at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_closed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_closed_at: MaybeUndefined, /// Comparator for the issues auto archived at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_archived_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_archived_at: MaybeUndefined, /// Comparator for the issues added to cycle at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub added_to_cycle_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_to_cycle_at: MaybeUndefined, /// Comparator for the period when issue was added to a cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub added_to_cycle_period: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_to_cycle_period: MaybeUndefined, /// Comparator for the issues due date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub due_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub due_date: MaybeUndefined, /// `Internal` Comparator for the issue's accumulatedStateUpdatedAt date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub accumulated_state_updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub accumulated_state_updated_at: MaybeUndefined, /// Comparator for the issues snoozed until date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub snoozed_until_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub snoozed_until_at: MaybeUndefined, /// Filters that the issues assignee must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assignee: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assignee: MaybeUndefined>, /// Filters that the issue's delegated agent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub delegate: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub delegate: MaybeUndefined>, /// Filters that the last applied template must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template: MaybeUndefined, /// `ALPHA` Filters that the recurring issue template must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub recurring_issue_template: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub recurring_issue_template: MaybeUndefined, /// Filters that the source must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub source_metadata: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub source_metadata: MaybeUndefined, /// Filters that the issues creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the issue parent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Filters that the issues snoozer must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub snoozed_by: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub snoozed_by: MaybeUndefined>, /// Filters that issue labels must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub labels: MaybeUndefined>, /// Filters that issue subscribers must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscribers: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscribers: MaybeUndefined>, /// Comparator for filtering issues which have been shared with users outside of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_shared_users: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_shared_users: MaybeUndefined, /// Filters that users the issue has been shared with must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub shared_with: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub shared_with: MaybeUndefined>, /// Filters that the issues team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined>, /// Filters that the issues project milestone must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestone: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestone: MaybeUndefined>, /// Filters that the issues comments must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comments: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comments: MaybeUndefined>, /// Filters that the issue's activities must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub activity: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub activity: MaybeUndefined>, /// `Internal` Filters that the issue's suggestions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggestions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggestions: MaybeUndefined>, /// Filters that the issues cycle must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle: MaybeUndefined>, /// Filters that the issues project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Filters that the issues state must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state: MaybeUndefined>, /// Filters that the child issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub children: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub children: MaybeUndefined>, /// Filters that the issues attachments must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub attachments: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub attachments: MaybeUndefined>, /// `Internal` Comparator for the issues content. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub searchable_content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub searchable_content: MaybeUndefined, /// Comparator for filtering issues with relations. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_related_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_related_relations: MaybeUndefined, /// Comparator for filtering issues which are duplicates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_duplicate_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_duplicate_relations: MaybeUndefined, /// Comparator for filtering issues which are blocked. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocked_by_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocked_by_relations: MaybeUndefined, /// Comparator for filtering issues which are blocking. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocking_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocking_relations: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested related issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_related_issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_related_issues: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested similar issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_similar_issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_similar_issues: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested assignees. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_assignees: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_assignees: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested projects. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_projects: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_projects: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested labels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_labels: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_teams: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_teams: MaybeUndefined, /// Comparator for the issues sla status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_status: MaybeUndefined, /// Filters that the issues reactions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// Filters that the issue's customer needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// `ALPHA` Filters that the issue's releases must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub releases: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub releases: MaybeUndefined>, /// Count of customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_count: MaybeUndefined, /// Count of important customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_important_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_important_count: MaybeUndefined, /// `Internal` Lead time (created -> completed) comparator. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lead_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lead_time: MaybeUndefined, /// `Internal` Cycle time (started -> completed) comparator. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_time: MaybeUndefined, /// `Internal` Age (created -> now) comparator, defined if the issue is still open. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub age_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub age_time: MaybeUndefined, /// `Internal` Triage time (entered triaged -> triaged) comparator. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub triage_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub triage_time: MaybeUndefined, /// Compound filters, all of which need to be matched by the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a new issue. At minimum, a team must be specified. A title is required unless a template is provided. All other fields are optional and will use defaults from the team or template if not specified. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The title of the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// The issue description in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// `Internal` The issue description as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description_data: MaybeUndefined, /// The identifier of the user to assign the issue to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assignee_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assignee_id: MaybeUndefined, /// The identifier of the agent user to delegate the issue to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub delegate_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub delegate_id: MaybeUndefined, /// The identifier of the parent issue. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, - /// The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, + /// The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// The estimated complexity of the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub estimate: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub estimate: MaybeUndefined, /// The identifiers of the users subscribing to this ticket. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscriber_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscriber_ids: MaybeUndefined>, /// The identifiers of the issue labels associated with this ticket. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_ids: MaybeUndefined>, /// The identifier of the team associated with the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + pub team_id: String, /// The cycle associated with the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_id: MaybeUndefined, /// The project associated with the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// The project milestone associated with the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestone_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestone_id: MaybeUndefined, /// The ID of the last template applied to the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template_id: MaybeUndefined, /// The team state of the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state_id: MaybeUndefined, /// The comment the issue is referencing. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reference_comment_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reference_comment_id: MaybeUndefined, /// The comment the issue is created from. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub source_comment_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub source_comment_id: MaybeUndefined, /// `Internal` The pull request comment the issue is created from. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub source_pull_request_comment_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub source_pull_request_comment_id: MaybeUndefined, /// The position of the issue related to other issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The position of the issue related to other issues, when ordered by priority. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority_sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority_sort_order: MaybeUndefined, /// The position of the issue in parent's sub-issue list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sub_issue_sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sub_issue_sort_order: MaybeUndefined, /// The date at which the issue is due. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub due_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub due_date: MaybeUndefined, /// Create issue as a user with the provided name. This option is only available to OAuth applications creating issues in `actor=app` mode. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub create_as_user: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub create_as_user: MaybeUndefined, /// Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_icon_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_icon_url: MaybeUndefined, /// Whether the passed sort order should be preserved. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub preserve_sort_order_on_create: Option, - /// The date when the issue was created (e.g. if importing from another system). Must be a date in the past. If none is provided, the backend will generate the time as now. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, - /// `Internal` The timestamp at which an issue will be considered in breach of SLA. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_breaches_at: Option>, - /// `Internal` The timestamp at which the issue's SLA was started. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_started_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub preserve_sort_order_on_create: MaybeUndefined, + /// The time at which the issue was created (e.g. if importing from another system). Must be a time in the past. If none is provided, the backend will generate the time as now. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined>, + /// `Internal` The time at which an issue will be considered in breach of SLA. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_breaches_at: MaybeUndefined>, + /// `Internal` The time at which the issue's SLA was started. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_started_at: MaybeUndefined>, /// The identifier of a template the issue should be created from. If other values are provided in the input, they will override template values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub template_id: Option, - /// The date when the issue was completed (e.g. if importing from another system). Must be a date in the past and after createdAt date. Cannot be provided with an incompatible workflow state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub template_id: MaybeUndefined, + /// The time at which the issue was completed (e.g. if importing from another system). Must be a time in the past and after createdAt. Cannot be provided with an incompatible workflow state. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined>, /// The SLA day count type for the issue. Whether SLA should be business days only or calendar days (default). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_type: MaybeUndefined, /// Whether to use the default template for the team. When set to true, the default template of this team based on user's membership will be applied. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub use_default_template: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub use_default_template: MaybeUndefined, + /// `ALPHA` The identifiers of the releases to associate with this issue. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_ids: MaybeUndefined>, + /// `Internal` Whether this issue should inherit shared access from its parent issue. Set to false to opt out of automatic shared access inheritance when creating a sub-issue. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherits_shared_access: MaybeUndefined, } /// Issue filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the issues number. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub number: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub number: MaybeUndefined, /// Comparator for the issues title. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// Comparator for the issues description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option>, - /// Comparator for the issues priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// Comparator for the issues priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Comparator for the issues estimate. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub estimate: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub estimate: MaybeUndefined, /// Comparator for the issues started at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub started_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub started_at: MaybeUndefined, /// Comparator for the issues triaged at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub triaged_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub triaged_at: MaybeUndefined, /// Comparator for the issues completed at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the issues canceled at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub canceled_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub canceled_at: MaybeUndefined, + /// Comparator for the issue's SLA breach date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_breaches_at: MaybeUndefined, /// Comparator for the issues archived at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub archived_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub archived_at: MaybeUndefined, /// Comparator for the issues auto closed at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_closed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_closed_at: MaybeUndefined, /// Comparator for the issues auto archived at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_archived_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_archived_at: MaybeUndefined, /// Comparator for the issues added to cycle at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub added_to_cycle_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_to_cycle_at: MaybeUndefined, /// Comparator for the period when issue was added to a cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub added_to_cycle_period: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_to_cycle_period: MaybeUndefined, /// Comparator for the issues due date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub due_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub due_date: MaybeUndefined, /// `Internal` Comparator for the issue's accumulatedStateUpdatedAt date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub accumulated_state_updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub accumulated_state_updated_at: MaybeUndefined, /// Comparator for the issues snoozed until date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub snoozed_until_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub snoozed_until_at: MaybeUndefined, /// Filters that the issues assignee must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assignee: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assignee: MaybeUndefined>, /// Filters that the issue's delegated agent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub delegate: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub delegate: MaybeUndefined>, /// Filters that the last applied template must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template: MaybeUndefined, /// `ALPHA` Filters that the recurring issue template must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub recurring_issue_template: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub recurring_issue_template: MaybeUndefined, /// Filters that the source must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub source_metadata: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub source_metadata: MaybeUndefined, /// Filters that the issues creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the issue parent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Filters that the issues snoozer must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub snoozed_by: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub snoozed_by: MaybeUndefined>, /// Filters that issue labels must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub labels: MaybeUndefined>, /// Filters that issue subscribers must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscribers: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscribers: MaybeUndefined>, /// Comparator for filtering issues which have been shared with users outside of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_shared_users: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_shared_users: MaybeUndefined, /// Filters that users the issue has been shared with must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub shared_with: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub shared_with: MaybeUndefined>, /// Filters that the issues team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined>, /// Filters that the issues project milestone must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestone: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestone: MaybeUndefined>, /// Filters that the issues comments must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comments: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comments: MaybeUndefined>, /// Filters that the issue's activities must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub activity: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub activity: MaybeUndefined>, /// `Internal` Filters that the issue's suggestions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggestions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggestions: MaybeUndefined>, /// Filters that the issues cycle must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle: MaybeUndefined>, /// Filters that the issues project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Filters that the issues state must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state: MaybeUndefined>, /// Filters that the child issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub children: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub children: MaybeUndefined>, /// Filters that the issues attachments must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub attachments: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub attachments: MaybeUndefined>, /// `Internal` Comparator for the issues content. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub searchable_content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub searchable_content: MaybeUndefined, /// Comparator for filtering issues with relations. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_related_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_related_relations: MaybeUndefined, /// Comparator for filtering issues which are duplicates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_duplicate_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_duplicate_relations: MaybeUndefined, /// Comparator for filtering issues which are blocked. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocked_by_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocked_by_relations: MaybeUndefined, /// Comparator for filtering issues which are blocking. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocking_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocking_relations: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested related issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_related_issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_related_issues: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested similar issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_similar_issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_similar_issues: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested assignees. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_assignees: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_assignees: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested projects. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_projects: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_projects: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested labels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_labels: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_teams: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_teams: MaybeUndefined, /// Comparator for the issues sla status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_status: MaybeUndefined, /// Filters that the issues reactions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// Filters that the issue's customer needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// `ALPHA` Filters that the issue's releases must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub releases: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub releases: MaybeUndefined>, /// Count of customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_count: MaybeUndefined, /// Count of important customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_important_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_important_count: MaybeUndefined, /// `Internal` Lead time (created -> completed) comparator. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lead_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lead_time: MaybeUndefined, /// `Internal` Cycle time (started -> completed) comparator. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_time: MaybeUndefined, /// `Internal` Age (created -> now) comparator, defined if the issue is still open. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub age_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub age_time: MaybeUndefined, /// `Internal` Triage time (entered triaged -> triaged) comparator. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub triage_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub triage_time: MaybeUndefined, /// Compound filters, all of which need to be matched by the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Comparator for issue identifiers. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueIDComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, } +/// Input for updating an import job's mapping configuration, such as user and workflow state mappings between the source service and Linear. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueImportUpdateInput { /// The mapping configuration for the import. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub mapping: Option, + pub mapping: serde_json::Value, } /// Issue label filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueLabelCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for whether the label is a group label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_group: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_group: MaybeUndefined, /// Filters that the issue labels creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the issue labels team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined>, /// Filters that the issue label's parent label must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some issue labels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all issue labels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a new label. A name is required. If no team is specified, the label is created as a workspace-level label available to all teams. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueLabelCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The description of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The color of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The identifier of the parent label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, /// The team associated with the label. If not given, the label will be associated with the entire workspace. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// Whether the label is a group. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_group: Option, - /// When the label was retired. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub retired_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_group: MaybeUndefined, + /// The time at which the label was retired. Set to null to restore a retired label. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub retired_at: MaybeUndefined>, } /// Issue label filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueLabelFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for whether the label is a group label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_group: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_group: MaybeUndefined, /// Filters that the issue labels creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the issue labels team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined>, /// Filters that the issue label's parent label must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Compound filters, all of which need to be matched by the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for updating an existing label. All fields are optional; only provided fields will be updated. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueLabelUpdateInput { /// The name of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The identifier of the parent label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, /// The color of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// Whether the label is a group. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_group: Option, - /// When the label was retired. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub retired_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_group: MaybeUndefined, + /// The time at which the label was retired. Set to null to restore a retired label. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub retired_at: MaybeUndefined>, } -/// A reference to an issue found during release creation. +/// A reference to an issue discovered during release sync, linking the issue identifier to the commit SHA where the reference was found. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueReferenceInput { /// The issue identifier (e.g. ENG-123). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub identifier: Option, + pub identifier: String, /// The commit SHA where this issue reference was found. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub commit_sha: Option, + pub commit_sha: String, } -#[derive(Debug, Clone, Default, Serialize, Deserialize)] +/// Input for creating a new issue relation between two issues. Both the source issue and related issue must be specified along with the relationship type. +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueRelationCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The type of relation of the issue to the related issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + pub r#type: IssueRelationType, /// The identifier of the issue that is related to another issue. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + pub issue_id: String, /// The identifier of the related issue. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_issue_id: Option, + pub related_issue_id: String, } +/// Input for updating an existing issue relation. All fields are optional; only provided fields will be updated. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueRelationUpdateInput { /// The type of relation of the issue to the related issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// The identifier of the issue that is related to another issue. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, /// The identifier of the related issue. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub related_issue_id: MaybeUndefined, } /// Issue sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueSortInput { /// Sort by priority - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Sort by estimate - #[serde(default, skip_serializing_if = "Option::is_none")] - pub estimate: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub estimate: MaybeUndefined, /// Sort by issue title - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// Sort by label - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label: MaybeUndefined, /// Sort by label group - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_group: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_group: MaybeUndefined, /// Sort by SLA status - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_status: MaybeUndefined, /// Sort by issue creation date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Sort by issue update date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Sort by issue completion date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Sort by issue due date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub due_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub due_date: MaybeUndefined, /// `Internal` Sort by the accumulated time in the current workflow state - #[serde(default, skip_serializing_if = "Option::is_none")] - pub accumulated_state_updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub accumulated_state_updated_at: MaybeUndefined, /// Sort by Cycle start date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle: MaybeUndefined, /// Sort by Project Milestone target date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub milestone: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub milestone: MaybeUndefined, /// Sort by assignee name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assignee: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assignee: MaybeUndefined, /// Sort by delegate name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub delegate: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub delegate: MaybeUndefined, /// Sort by Project name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined, /// Sort by Team name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined, /// Sort by manual order - #[serde(default, skip_serializing_if = "Option::is_none")] - pub manual: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub manual: MaybeUndefined, /// Sort by workflow state type - #[serde(default, skip_serializing_if = "Option::is_none")] - pub workflow_state: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub workflow_state: MaybeUndefined, /// Sort by customer name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer: MaybeUndefined, /// Sort by customer revenue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_revenue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_revenue: MaybeUndefined, /// Sort by number of customers associated with the issue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_count: MaybeUndefined, /// Sort by number of important customers associated with the issue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_important_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_important_count: MaybeUndefined, /// Sort by the root issue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub root_issue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub root_issue: MaybeUndefined>, /// `ALPHA` Sort by number of links associated with the issue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub link_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub link_count: MaybeUndefined, + /// `ALPHA` Sort by most recent release date + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release: MaybeUndefined, +} +/// Filter for issue subscription events. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct IssueSubscriptionFilter { + /// Filter by team ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, + /// Filter by project ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, + /// Filter by assignee ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assignee_id: MaybeUndefined, + /// Filter by workflow state ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state_id: MaybeUndefined, + /// Filter by parent issue ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, } /// IssueSuggestion collection filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueSuggestionCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the suggestion type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Comparator for the suggestion state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state: MaybeUndefined, /// Filters that the suggested user must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggested_user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggested_user: MaybeUndefined>, /// Filters that the suggested project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggested_project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggested_project: MaybeUndefined>, /// Filters that the suggested team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggested_team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggested_team: MaybeUndefined>, /// Filters that the suggested label must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggested_label: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggested_label: MaybeUndefined>, /// Compound filters, all of which need to be matched by the suggestion. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the suggestion. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some suggestions. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all suggestions. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } /// IssueSuggestion filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueSuggestionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the suggestion type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Comparator for the suggestion state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state: MaybeUndefined, /// Filters that the suggested user must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggested_user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggested_user: MaybeUndefined>, /// Filters that the suggested project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggested_project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggested_project: MaybeUndefined>, /// Filters that the suggested team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggested_team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggested_team: MaybeUndefined>, /// Filters that the suggested label must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggested_label: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggested_label: MaybeUndefined>, /// Compound filters, all of which need to be matched by the suggestion. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the suggestion. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } -/// `ALPHA` The properties of the issueToRelease to create. +/// `ALPHA` Input for creating a new association between an issue and a release. Both an issue identifier and a release identifier must be provided. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueToReleaseCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The identifier of the issue. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, - /// The identifier of the release - #[serde(default, skip_serializing_if = "Option::is_none")] - pub release_id: Option, + pub issue_id: String, + /// The identifier of the release. + pub release_id: String, } +/// Input for updating an existing issue. All fields are optional; only provided fields will be updated. Setting a field to null (where supported) will clear the value. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct IssueUpdateInput { /// The issue title. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// The issue description in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// `Internal` The issue description as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description_data: MaybeUndefined, /// The identifier of the user to assign the issue to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assignee_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assignee_id: MaybeUndefined, /// The identifier of the agent user to delegate the issue to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub delegate_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub delegate_id: MaybeUndefined, /// The identifier of the parent issue. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, - /// The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, + /// The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// The estimated complexity of the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub estimate: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub estimate: MaybeUndefined, /// The identifiers of the users subscribing to this ticket. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscriber_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscriber_ids: MaybeUndefined>, /// The identifiers of the issue labels associated with this ticket. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_ids: MaybeUndefined>, /// The identifiers of the issue labels to be added to this issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub added_label_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_label_ids: MaybeUndefined>, /// The identifiers of the issue labels to be removed from this issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub removed_label_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub removed_label_ids: MaybeUndefined>, + /// The identifiers of the releases associated with this issue. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_ids: MaybeUndefined>, + /// The identifiers of the releases to be added to this issue. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_release_ids: MaybeUndefined>, + /// The identifiers of the releases to be removed from this issue. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub removed_release_ids: MaybeUndefined>, /// The identifier of the team associated with the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// The cycle associated with the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_id: MaybeUndefined, /// The project associated with the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// The project milestone associated with the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestone_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestone_id: MaybeUndefined, /// The ID of the last template applied to the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template_id: MaybeUndefined, /// The team state of the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state_id: MaybeUndefined, /// The position of the issue related to other issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The position of the issue related to other issues, when ordered by priority. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority_sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority_sort_order: MaybeUndefined, /// The position of the issue in parent's sub-issue list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sub_issue_sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sub_issue_sort_order: MaybeUndefined, /// The date at which the issue is due. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub due_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub due_date: MaybeUndefined, + /// Whether this issue should inherit shared access from its parent issue. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherits_shared_access: MaybeUndefined, /// Whether the issue has been trashed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub trashed: Option, - /// `Internal` The timestamp at which an issue will be considered in breach of SLA. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_breaches_at: Option>, - /// `Internal` The timestamp at which the issue's SLA was started. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_started_at: Option>, - /// The time until an issue will be snoozed in Triage view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub snoozed_until_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub trashed: MaybeUndefined, + /// `Internal` The time at which an issue will be considered in breach of SLA. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_breaches_at: MaybeUndefined>, + /// `Internal` The time at which the issue's SLA was started. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_started_at: MaybeUndefined>, + /// The time until which the issue will be snoozed in Triage view. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub snoozed_until_at: MaybeUndefined>, /// The identifier of the user who snoozed the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub snoozed_by_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub snoozed_by_id: MaybeUndefined, /// The SLA day count type for the issue. Whether SLA should be business days only or calendar days (default). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_type: MaybeUndefined, /// Whether the issue was automatically closed because its parent issue was closed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_closed_by_parent_closing: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_closed_by_parent_closing: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct JiraConfigurationInput { /// The Jira personal access token. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub access_token: Option, + pub access_token: String, /// The Jira user's email address. A username is also accepted on Jira Server / DC. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option, + pub email: String, /// The Jira installation hostname. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub hostname: Option, + pub hostname: String, /// Whether this integration will be setup using the manual webhook flow. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub manual_setup: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub manual_setup: MaybeUndefined, +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct JiraFetchProjectStatusesInput { + /// The id of the Jira integration. + pub integration_id: String, + /// The Jira project ID to fetch statuses for. + pub project_id: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct JiraLinearMappingInput { /// The Jira id for this project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub jira_project_id: Option, + pub jira_project_id: String, /// The Linear team id to map to the given project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub linear_team_id: Option, + pub linear_team_id: String, /// Whether the sync for this mapping is bidirectional. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub bidirectional: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub bidirectional: MaybeUndefined, /// Whether this mapping is the default one for issue creation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default: MaybeUndefined, + /// Whether this mapping uses legacy unidirectional sync behavior where no changes sync from Linear to Jira. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub legacy_unidirectional: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct JiraPersonalSettingsInput { /// The name of the Jira site currently authorized through the integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub site_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub site_name: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct JiraProjectDataInput { /// The Jira id for this project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + pub id: String, /// The Jira key for this project, such as ENG. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub key: Option, + pub key: String, /// The Jira name for this project, such as Engineering. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct JiraSettingsInput { /// The mapping of Jira project id => Linear team id. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_mapping: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_mapping: MaybeUndefined>, /// The Jira projects for the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub projects: Option>>, + pub projects: Vec, /// Whether this integration is for Jira Server or not. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_jira_server: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_jira_server: MaybeUndefined, + /// Whether this integration uses custom OAuth authentication (enterprise SSO). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_custom_o_auth: MaybeUndefined, + /// The OAuth client ID for the personal connection OAuth app, when using custom OAuth. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub personal_o_auth_client_id: MaybeUndefined, + /// The custom OAuth server token endpoint URL (enterprise SSO). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub custom_o_auth_server_url: MaybeUndefined, /// Whether the user needs to provide setup information about the webhook to complete the integration setup. Only relevant for integrations that use a manual setup flow - #[serde(default, skip_serializing_if = "Option::is_none")] - pub setup_pending: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub setup_pending: MaybeUndefined, /// Whether this integration is using a manual setup flow. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub manual_setup: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub manual_setup: MaybeUndefined, /// The label of the Jira instance, for visual identification purposes only - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label: Option, - /// The status names per issue type, per project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_names_per_issue_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label: MaybeUndefined, + /// Jira status names grouped by project, separated into issue statuses (non-Epic) and project statuses (Epic). Structure: projectId -> { issueStatuses: string[], projectStatuses: string[] } + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_names_per_issue_type: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct JiraUpdateInput { /// The id of the integration to update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + pub id: String, /// Whether to refresh Jira Projects for the integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_projects: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_projects: MaybeUndefined, /// Whether to refresh Jira metadata for the integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_metadata: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_metadata: MaybeUndefined, /// Whether to delete the current manual webhook configuration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub delete_webhook: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub delete_webhook: MaybeUndefined, /// Webhook secret for a new manual configuration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub webhook_secret: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub webhook_secret: MaybeUndefined, /// Whether the Jira instance does not support webhook secrets. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub no_secret: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub no_secret: MaybeUndefined, /// The Jira personal access token. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub access_token: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub access_token: MaybeUndefined, /// The Jira user email address associated with the personal access token. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub email: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct JoinOrganizationInput { /// The identifier of the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub organization_id: Option, + pub organization_id: String, /// An optional invite link for an organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub invite_link: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub invite_link: MaybeUndefined, } /// Issue label-group sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LabelGroupSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, /// The label-group id to sort by - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_group_id: Option, + pub label_group_id: String, } /// Issue label sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LabelSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LaunchDarklySettingsInput { /// The project key of the LaunchDarkly integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_key: Option, + pub project_key: String, /// The environment of the LaunchDarkly integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub environment: Option, + pub environment: String, } /// `ALPHA` Issue link count sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LinkCountSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Issue manual sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ManualSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, +} +/// An additional HTTP header sent with requests to the connected MCP server. Header values are stored securely. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct McpServerCustomHeaderInput { + /// The HTTP header name. + pub name: String, + /// The HTTP header value. + pub value: String, +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct MicrosoftTeamsPostSettingsInput { + /// AAD group id of the Team. + pub team_id: String, + /// Display name of the Team. + pub team_name: String, + /// Microsoft Teams channel id. + pub channel_id: String, + /// Display name of the channel. + pub channel_name: String, + /// Membership type of the channel: standard, private, or shared. + pub membership_type: String, + /// Azure AD tenant id the team belongs to. + pub tenant_id: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct MicrosoftTeamsSettingsInput { /// The display name of the Azure AD tenant. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub tenant_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub tenant_name: MaybeUndefined, + /// Whether Code Intelligence should be enabled for this Microsoft Teams integration. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_code_intelligence: MaybeUndefined, } /// Issue project milestone options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct MilestoneSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Customer name sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NameSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationCategoryPreferencesInput { /// The preferences for notifications about assignments. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assignments: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assignments: MaybeUndefined, /// The preferences for notifications about status changes. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_changes: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_changes: MaybeUndefined, /// The preferences for notifications about comments and replies. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comments_and_replies: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comments_and_replies: MaybeUndefined, /// The preferences for notifications about mentions. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub mentions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub mentions: MaybeUndefined, /// The preferences for notifications about reactions. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// The preferences for notifications about subscriptions. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscriptions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscriptions: MaybeUndefined, /// The preferences for notifications about document changes. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub document_changes: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub document_changes: MaybeUndefined, /// The preferences for notifications about posts and updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub posts_and_updates: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub posts_and_updates: MaybeUndefined, /// The preferences for notifications about reminders. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reminders: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reminders: MaybeUndefined, /// The preferences for notifications about reviews. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reviews: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reviews: MaybeUndefined, /// The preferences for notifications about apps and integrations. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub apps_and_integrations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub apps_and_integrations: MaybeUndefined, /// The preferences for notifications about triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub triage: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub triage: MaybeUndefined, /// The preferences for notifications about customers. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customers: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customers: MaybeUndefined, /// The preferences for notifications about feed summaries. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub feed: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub feed: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationDeliveryPreferencesChannelInput { /// The schedule for notifications on this channel. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub schedule: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub schedule: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationDeliveryPreferencesDayInput { - /// The time notifications start. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start: Option, - /// The time notifications end. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub end: Option, + /// The start time of the notification delivery window in HH:MM military time format (e.g., '09:00'). Must be earlier than 'end'. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start: MaybeUndefined, + /// The end time of the notification delivery window in HH:MM military time format (e.g., '18:00'). Must be later than 'start'. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub end: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationDeliveryPreferencesInput { /// The delivery preferences for the mobile channel. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub mobile: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub mobile: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationDeliveryPreferencesScheduleInput { - /// Whether the schedule is disabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub disabled: Option, + /// Whether the entire delivery schedule is disabled. When true, notifications are delivered at any time regardless of the per-day settings. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub disabled: MaybeUndefined, /// Delivery preferences for Sunday. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sunday: Option>, + pub sunday: NotificationDeliveryPreferencesDayInput, /// Delivery preferences for Monday. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub monday: Option>, + pub monday: NotificationDeliveryPreferencesDayInput, /// Delivery preferences for Tuesday. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub tuesday: Option>, + pub tuesday: NotificationDeliveryPreferencesDayInput, /// Delivery preferences for Wednesday. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub wednesday: Option>, + pub wednesday: NotificationDeliveryPreferencesDayInput, /// Delivery preferences for Thursday. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub thursday: Option>, + pub thursday: NotificationDeliveryPreferencesDayInput, /// Delivery preferences for Friday. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub friday: Option>, + pub friday: NotificationDeliveryPreferencesDayInput, /// Delivery preferences for Saturday. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub saturday: Option>, + pub saturday: NotificationDeliveryPreferencesDayInput, } -/// Describes the type and id of the entity to target for notifications. +/// Identifies a specific entity whose related notifications should be targeted by a batch operation. Exactly one entity identifier should be provided. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationEntityInput { /// The id of the issue related to the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, /// `DEPRECATED` The id of the project related to the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// The id of the initiative related to the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// The id of the project update related to the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update_id: MaybeUndefined, /// The id of the initiative update related to the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_update_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_update_id: MaybeUndefined, /// The id of the OAuth client approval related to the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub oauth_client_approval_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub oauth_client_approval_id: MaybeUndefined, /// The id of the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, } /// Notification filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the notification type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Comparator for the archived at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub archived_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub archived_at: MaybeUndefined, /// Compound filters, all of which need to be matched by the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for creating a notification subscription. Exactly one target entity (customer, custom view, cycle, initiative, label, project, team, or user) must be specified along with the notification types to subscribe to. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationSubscriptionCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The identifier of the customer to subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_id: MaybeUndefined, /// The identifier of the custom view to subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub custom_view_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub custom_view_id: MaybeUndefined, /// The identifier of the cycle to subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_id: MaybeUndefined, /// The identifier of the initiative to subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// The identifier of the label to subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_id: MaybeUndefined, /// The identifier of the project to subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// The identifier of the team to subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// The identifier of the user to subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user_id: MaybeUndefined, /// The type of view to which the notification subscription context is associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub context_view_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub context_view_type: MaybeUndefined, /// The type of user view to which the notification subscription context is associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_context_view_type: Option, - /// The types of notifications of the subscription. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub notification_subscription_types: Option>, - /// Whether the subscription is active. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub active: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user_context_view_type: MaybeUndefined, + /// The specific notification event types the subscriber wants to receive for the target entity. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub notification_subscription_types: MaybeUndefined>, + /// Whether the subscription is active. Set to false to pause notifications without deleting the subscription. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub active: MaybeUndefined, } +/// Input for updating an existing notification subscription. Allows changing the subscribed notification types and active state. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationSubscriptionUpdateInput { - /// The types of notifications of the subscription. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub notification_subscription_types: Option>, + /// The specific notification event types the subscriber wants to receive. Replaces all previously configured types. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub notification_subscription_types: MaybeUndefined>, /// Whether the subscription is active. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub active: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub active: MaybeUndefined, } +/// Input for updating a notification's read and snooze state. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotificationUpdateInput { /// The time when notification was marked as read. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub read_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub read_at: MaybeUndefined>, /// The time until a notification will be snoozed. After that it will appear in the inbox again. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub snoozed_until_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub snoozed_until_at: MaybeUndefined>, /// The id of the project update related to the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update_id: Option, - /// The id of the project update related to the notification. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_update_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update_id: MaybeUndefined, + /// The id of the initiative update related to the notification. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_update_id: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NotionSettingsInput { /// The ID of the Notion workspace being connected. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub workspace_id: Option, + pub workspace_id: String, /// The name of the Notion workspace being connected. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub workspace_name: Option, + pub workspace_name: String, } /// Comment filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableCommentFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the comment's body. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// Filters that the comment's creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user: MaybeUndefined>, /// Filters that the comment's issue must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue: MaybeUndefined>, /// Filters that the comment's project update must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update: MaybeUndefined>, /// Filters that the comment parent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Filters that the comment's document content must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub document_content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub document_content: MaybeUndefined>, + /// `Internal` Filters that the comment's project must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, + /// `Internal` Filters that the comment's initiative must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative: MaybeUndefined>, /// Filters that the comment's reactions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// Filters that the comment's customer needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the comment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the comment. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Customer filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableCustomerFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the customer name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the customer slack channel ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_channel_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_channel_id: MaybeUndefined, /// Comparator for the customer's domains. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub domains: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub domains: MaybeUndefined, /// Comparator for the customer's external IDs. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_ids: MaybeUndefined, /// Filters that the customer owner must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined>, /// Filters that the customer's needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// Comparator for the customer generated revenue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub revenue: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub revenue: MaybeUndefined, /// Comparator for the customer size. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub size: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub size: MaybeUndefined, /// Filters that the customer's status must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, /// Filters that the customer's tier must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub tier: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub tier: MaybeUndefined, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the customer. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Cycle filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableCycleFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the cycle number. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub number: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub number: MaybeUndefined, /// Comparator for the cycle name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the cycle start date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_at: MaybeUndefined, /// Comparator for the cycle ends at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ends_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ends_at: MaybeUndefined, /// Comparator for the cycle completed at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the filtering active cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_active: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_active: MaybeUndefined, /// Comparator for filtering for whether the cycle is currently in cooldown. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_in_cooldown: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_in_cooldown: MaybeUndefined, /// Comparator for the filtering next cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_next: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_next: MaybeUndefined, /// Comparator for the filtering previous cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_previous: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_previous: MaybeUndefined, /// Comparator for the filtering future cycles. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_future: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_future: MaybeUndefined, /// Comparator for the filtering past cycles. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_past: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_past: MaybeUndefined, /// Filters that the cycles team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined>, /// Filters that the cycles issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issues: MaybeUndefined>, /// Comparator for the inherited cycle ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inherited_from_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherited_from_id: MaybeUndefined, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Comparator for optional dates. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableDateComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Less-than constraint. Matches any values that are less than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lt: MaybeUndefined, /// Less-than-or-equal constraint. Matches any values that are less than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lte: MaybeUndefined, /// Greater-than constraint. Matches any values that are greater than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gt: MaybeUndefined, /// Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gte: MaybeUndefined, } /// Document content filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableDocumentContentFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the document content. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub content: MaybeUndefined, /// Filters that the document content project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Filters that the document content document must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub document: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub document: MaybeUndefined>, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Nullable comparator for optional durations. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableDurationComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Less-than constraint. Matches any values that are less than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lt: MaybeUndefined, /// Less-than-or-equal constraint. Matches any values that are less than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lte: MaybeUndefined, /// Greater-than constraint. Matches any values that are greater than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gt: MaybeUndefined, /// Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gte: MaybeUndefined, +} +/// Initiative filtering options. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct NullableInitiativeFilter { + /// Comparator for the identifier. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// Comparator for the created at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, + /// Comparator for the updated at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, + /// Comparator for the initiative name. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// Comparator for the initiative slug ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, + /// Filters that the initiative creator must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, + /// Comparator for the initiative status: Planned, Active, Completed + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, + /// Filters that the initiative teams must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub teams: MaybeUndefined>, + /// Filters that the initiative owner must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined>, + /// Comparator for the initiative target date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, + /// Comparator for the initiative started at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub started_at: MaybeUndefined, + /// Comparator for the initiative completed at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, + /// Comparator for the initiative health: onTrack, atRisk, offTrack + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, + /// Comparator for the initiative health (with age): onTrack, atRisk, offTrack, outdated, noUpdate + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health_with_age: MaybeUndefined, + /// Comparator for the initiative activity type. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub activity_type: MaybeUndefined, + /// Filters that the initiative must be an ancestor of. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ancestors: MaybeUndefined>, + /// Filters that the initiative updates must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_updates: MaybeUndefined, + /// Filter based on the existence of the relation. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, + /// Compound filters, all of which need to be matched by the initiative. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, + /// Compound filters, one of which need to be matched by the initiative. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Issue filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableIssueFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the issues number. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub number: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub number: MaybeUndefined, /// Comparator for the issues title. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub title: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// Comparator for the issues description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option>, - /// Comparator for the issues priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// Comparator for the issues priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Comparator for the issues estimate. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub estimate: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub estimate: MaybeUndefined, /// Comparator for the issues started at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub started_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub started_at: MaybeUndefined, /// Comparator for the issues triaged at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub triaged_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub triaged_at: MaybeUndefined, /// Comparator for the issues completed at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the issues canceled at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub canceled_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub canceled_at: MaybeUndefined, + /// Comparator for the issue's SLA breach date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_breaches_at: MaybeUndefined, /// Comparator for the issues archived at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub archived_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub archived_at: MaybeUndefined, /// Comparator for the issues auto closed at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_closed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_closed_at: MaybeUndefined, /// Comparator for the issues auto archived at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_archived_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_archived_at: MaybeUndefined, /// Comparator for the issues added to cycle at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub added_to_cycle_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_to_cycle_at: MaybeUndefined, /// Comparator for the period when issue was added to a cycle. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub added_to_cycle_period: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub added_to_cycle_period: MaybeUndefined, /// Comparator for the issues due date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub due_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub due_date: MaybeUndefined, /// `Internal` Comparator for the issue's accumulatedStateUpdatedAt date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub accumulated_state_updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub accumulated_state_updated_at: MaybeUndefined, /// Comparator for the issues snoozed until date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub snoozed_until_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub snoozed_until_at: MaybeUndefined, /// Filters that the issues assignee must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assignee: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assignee: MaybeUndefined>, /// Filters that the issue's delegated agent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub delegate: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub delegate: MaybeUndefined>, /// Filters that the last applied template must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template: MaybeUndefined, /// `ALPHA` Filters that the recurring issue template must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub recurring_issue_template: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub recurring_issue_template: MaybeUndefined, /// Filters that the source must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub source_metadata: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub source_metadata: MaybeUndefined, /// Filters that the issues creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the issue parent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Filters that the issues snoozer must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub snoozed_by: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub snoozed_by: MaybeUndefined>, /// Filters that issue labels must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub labels: MaybeUndefined>, /// Filters that issue subscribers must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscribers: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscribers: MaybeUndefined>, /// Comparator for filtering issues which have been shared with users outside of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_shared_users: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_shared_users: MaybeUndefined, /// Filters that users the issue has been shared with must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub shared_with: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub shared_with: MaybeUndefined>, /// Filters that the issues team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined>, /// Filters that the issues project milestone must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestone: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestone: MaybeUndefined>, /// Filters that the issues comments must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comments: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comments: MaybeUndefined>, /// Filters that the issue's activities must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub activity: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub activity: MaybeUndefined>, /// `Internal` Filters that the issue's suggestions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub suggestions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub suggestions: MaybeUndefined>, /// Filters that the issues cycle must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle: MaybeUndefined>, /// Filters that the issues project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Filters that the issues state must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state: MaybeUndefined>, /// Filters that the child issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub children: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub children: MaybeUndefined>, /// Filters that the issues attachments must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub attachments: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub attachments: MaybeUndefined>, /// `Internal` Comparator for the issues content. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub searchable_content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub searchable_content: MaybeUndefined, /// Comparator for filtering issues with relations. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_related_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_related_relations: MaybeUndefined, /// Comparator for filtering issues which are duplicates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_duplicate_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_duplicate_relations: MaybeUndefined, /// Comparator for filtering issues which are blocked. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocked_by_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocked_by_relations: MaybeUndefined, /// Comparator for filtering issues which are blocking. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocking_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocking_relations: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested related issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_related_issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_related_issues: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested similar issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_similar_issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_similar_issues: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested assignees. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_assignees: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_assignees: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested projects. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_projects: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_projects: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested labels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_labels: MaybeUndefined, /// `Internal` Comparator for filtering issues which have suggested teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_suggested_teams: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_suggested_teams: MaybeUndefined, /// Comparator for the issues sla status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_status: MaybeUndefined, /// Filters that the issues reactions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// Filters that the issue's customer needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// `ALPHA` Filters that the issue's releases must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub releases: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub releases: MaybeUndefined>, /// Count of customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_count: MaybeUndefined, /// Count of important customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_important_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_important_count: MaybeUndefined, /// `Internal` Lead time (created -> completed) comparator. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lead_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lead_time: MaybeUndefined, /// `Internal` Cycle time (started -> completed) comparator. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_time: MaybeUndefined, /// `Internal` Age (created -> now) comparator, defined if the issue is still open. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub age_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub age_time: MaybeUndefined, /// `Internal` Triage time (entered triaged -> triaged) comparator. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub triage_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub triage_time: MaybeUndefined, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Comparator for optional numbers. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableNumberComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Less-than constraint. Matches any values that are less than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lt: MaybeUndefined, /// Less-than-or-equal constraint. Matches any values that are less than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lte: MaybeUndefined, /// Greater-than constraint. Matches any values that are greater than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gt: MaybeUndefined, /// Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gte: MaybeUndefined, } /// Project filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableProjectFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the project name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the project slug ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// `DEPRECATED` Comparator for the project state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state: MaybeUndefined, /// Filters that the project's status must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined>, /// Comparator for the projects priority. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Filters that project labels must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub labels: MaybeUndefined>, /// `Internal` Comparator for the project's content. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub searchable_content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub searchable_content: MaybeUndefined, /// Comparator for the project started date (when it was moved to an "In Progress" status). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub started_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub started_at: MaybeUndefined, /// Comparator for the project completion date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the project cancelation date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub canceled_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub canceled_at: MaybeUndefined, /// Comparator for the project start date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date: MaybeUndefined, /// Comparator for the project target date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// Comparator for the project health: onTrack, atRisk, offTrack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Comparator for the project health (with age): onTrack, atRisk, offTrack, outdated, noUpdate - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health_with_age: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health_with_age: MaybeUndefined, /// `ALPHA` Comparator for the project activity type: buzzin, active, some, none - #[serde(default, skip_serializing_if = "Option::is_none")] - pub activity_type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub activity_type: MaybeUndefined, /// Comparator for filtering projects with relations. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_related_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_related_relations: MaybeUndefined, /// `Deprecated` Comparator for filtering projects which this is depended on by. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_depended_on_by_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_depended_on_by_relations: MaybeUndefined, /// `Deprecated`Comparator for filtering projects which this depends on. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_depends_on_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_depends_on_relations: MaybeUndefined, /// Comparator for filtering projects which are blocked. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocked_by_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocked_by_relations: MaybeUndefined, /// Comparator for filtering projects which are blocking. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocking_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocking_relations: MaybeUndefined, /// Comparator for filtering projects with violated dependencies. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_violated_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_violated_relations: MaybeUndefined, /// Comparator for the project updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_updates: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_updates: MaybeUndefined, /// Filters that the projects creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the projects lead must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lead: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lead: MaybeUndefined>, /// Filters that the projects members must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub members: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub members: MaybeUndefined>, /// Filters that the projects issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issues: MaybeUndefined>, /// Filters that the projects roadmaps must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub roadmaps: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub roadmaps: MaybeUndefined>, /// Filters that the projects initiatives must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiatives: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiatives: MaybeUndefined>, /// Filters that the project's milestones must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestones: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestones: MaybeUndefined>, /// Filters that the project's completed milestones must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_project_milestones: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_project_milestones: MaybeUndefined>, /// Filters that the project's next milestone must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub next_project_milestone: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub next_project_milestone: MaybeUndefined>, /// Filters that the project's team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub accessible_teams: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub accessible_teams: MaybeUndefined>, /// Filters that the last applied template must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template: MaybeUndefined, /// Filters that the project's customer needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// Count of customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_count: MaybeUndefined, /// Count of important customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_important_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_important_count: MaybeUndefined, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Project milestone filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableProjectMilestoneFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the project milestone name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the project milestone target date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// Filters that the project milestone's project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Nullable project update filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableProjectUpdateFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Filters that the project update creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user: MaybeUndefined>, /// Filters that the project update project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Filters that the project updates reactions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the project update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the project update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Comparator for optional strings. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableStringComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Equals case insensitive. Matches any values that matches the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq_ignore_case: MaybeUndefined, /// Not-equals case insensitive. Matches any values that don't match the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq_ignore_case: MaybeUndefined, /// Starts with constraint. Matches any values that start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_with: MaybeUndefined, /// Starts with case insensitive constraint. Matches any values that start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_with_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_with_ignore_case: MaybeUndefined, /// Doesn't start with constraint. Matches any values that don't start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_starts_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_starts_with: MaybeUndefined, /// Ends with constraint. Matches any values that end with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ends_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ends_with: MaybeUndefined, /// Doesn't end with constraint. Matches any values that don't end with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_ends_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_ends_with: MaybeUndefined, /// Contains constraint. Matches any values that contain the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains: MaybeUndefined, /// Contains case insensitive constraint. Matches any values that contain the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains_ignore_case: MaybeUndefined, /// Doesn't contain constraint. Matches any values that don't contain the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_contains: MaybeUndefined, /// Doesn't contain case insensitive constraint. Matches any values that don't contain the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_contains_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_contains_ignore_case: MaybeUndefined, /// Contains case and accent insensitive constraint. Matches any values that contain the given string case and accent insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains_ignore_case_and_accent: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains_ignore_case_and_accent: MaybeUndefined, } /// Team filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableTeamFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the team name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the team key. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub key: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub key: MaybeUndefined, /// Comparator for the team description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// Comparator for the team privacy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub private: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub private: MaybeUndefined, + /// Comparator for the time at which the team was retired. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub retired_at: MaybeUndefined, /// Filters that the teams issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issues: MaybeUndefined>, /// Filters that the teams parent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, + /// Filters that the team's ancestors must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ancestors: MaybeUndefined>, + /// `ALPHA` Filters that the team's release pipelines must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_pipelines: MaybeUndefined>, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Template filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableTemplateFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the template's name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the template's type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Comparator for the inherited template's ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inherited_from_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherited_from_id: MaybeUndefined, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the template. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the template. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Comparator for optional timeless dates. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableTimelessDateComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Less-than constraint. Matches any values that are less than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lt: MaybeUndefined, /// Less-than-or-equal constraint. Matches any values that are less than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lte: MaybeUndefined, /// Greater-than constraint. Matches any values that are greater than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gt: MaybeUndefined, /// Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gte: MaybeUndefined, } /// User filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NullableUserFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the user's name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the user's display name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, /// Comparator for the user's email. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub email: MaybeUndefined, /// Comparator for the user's activity status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub active: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub active: MaybeUndefined, /// Filters that the users assigned issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assigned_issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assigned_issues: MaybeUndefined>, /// Comparator for the user's admin status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub admin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub admin: MaybeUndefined, /// Comparator for the user's owner status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined, /// Comparator for the user's invited status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub invited: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub invited: MaybeUndefined, /// Comparator for the user's invited status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_invited: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_invited: MaybeUndefined, /// Comparator for the user's app status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub app: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub app: MaybeUndefined, /// Filter based on the currently authenticated user. Set to true to filter for the authenticated user, false for any other user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_me: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_me: MaybeUndefined, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Comparator for numbers. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct NumberComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Less-than constraint. Matches any values that are less than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lt: MaybeUndefined, /// Less-than-or-equal constraint. Matches any values that are less than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lte: MaybeUndefined, /// Greater-than constraint. Matches any values that are greater than the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gt: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gt: MaybeUndefined, /// Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub gte: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub gte: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OnboardingCustomerSurvey { - #[serde(default, skip_serializing_if = "Option::is_none")] - pub company_role: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub company_size: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub company_role: MaybeUndefined, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub company_size: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OpsgenieInput { /// The date when the Opsgenie API failed with an unauthorized error. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub api_failed_with_unauthorized_error_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub api_failed_with_unauthorized_error_at: MaybeUndefined>, +} +/// Input for updating workspace authentication settings. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct OrganizationAuthSettingsInput { + /// Allowed authentication providers, empty array means all are allowed. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub allowed_auth_services: MaybeUndefined>, + /// `Internal` The minimum role required for the auth service bypass exemption. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub allowed_auth_service_bypass_role: MaybeUndefined, + /// Whether to hide non-primary workspaces during signup for users with matching email domains. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub hide_non_primary_organizations: MaybeUndefined, + /// Whether to disable admin/owner auth service bypass. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub disable_auth_service_bypass: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OrganizationDomainCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The identity provider to which to add the domain. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub identity_provider_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub identity_provider_id: MaybeUndefined, /// The domain name to add. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The email address to which to send the verification code. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub verification_email: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub verification_email: MaybeUndefined, /// The authentication type this domain is for. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auth_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auth_type: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OrganizationDomainUpdateInput { /// Prevent users with this domain to create new workspaces. Only allowed to set on claimed domains! - #[serde(default, skip_serializing_if = "Option::is_none")] - pub disable_organization_creation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub disable_organization_creation: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OrganizationDomainVerificationInput { /// The identifier in UUID v4 format of the domain being verified. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub organization_domain_id: Option, + pub organization_domain_id: String, /// The verification code sent via email. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub verification_code: Option, + pub verification_code: String, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OrganizationInviteCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The email of the invitee. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option, + pub email: String, /// What user role the invite should grant. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub role: MaybeUndefined, /// The teams that the user has been invited to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_ids: MaybeUndefined>, /// `INTERNAL` Optional metadata about the invite. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub metadata: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub metadata: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OrganizationInviteUpdateInput { /// The teams that the user has been invited to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_ids: Option>, + pub team_ids: Vec, } /// `INTERNAL` Organization IP restriction configuration. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OrganizationIpRestrictionInput { /// IP range in CIDR format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub range: Option, + pub range: String, /// Restriction type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + pub r#type: String, /// Optional restriction description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// Whether the restriction is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enabled: Option, + pub enabled: bool, +} +/// `Internal` An MCP server URL entry for the Linear Agent allowlist. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct OrganizationLinearAgentMcpServerAllowlistEntryInput { + /// `Internal` The MCP server URL that Linear Agent is allowed to use. + pub url: String, +} +/// `Internal` Input for updating Linear Agent settings for the workspace. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct OrganizationLinearAgentSettingsInput { + /// `Internal` Whether the workspace has enabled web search for Linear Agent. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub web_search_enabled: MaybeUndefined, + /// `Internal` Whether the workspace has enabled MCP servers for Linear Agent. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub mcp_servers_enabled: MaybeUndefined, + /// `Internal` The MCP server allowlist for Linear Agent. When unset, all MCP servers are allowed. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub mcp_servers_allowlist: + MaybeUndefined>, } +/// Input for updating workspace security settings such as role-based access controls. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OrganizationSecuritySettingsInput { /// The minimum role required to create personal API keys. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub personal_api_keys_role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub personal_api_keys_role: MaybeUndefined, /// The minimum role required to invite users. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub invitations_role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub invitations_role: MaybeUndefined, /// The minimum role required to create teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_creation_role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_creation_role: MaybeUndefined, /// The minimum role required to manage workspace labels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_management_role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_management_role: MaybeUndefined, /// The minimum role required to manage API settings. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub api_settings_role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub api_settings_role: MaybeUndefined, /// The minimum role required to manage workspace templates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub template_management_role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub template_management_role: MaybeUndefined, /// The minimum role required to import data. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub import_role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub import_role: MaybeUndefined, /// The minimum role required to manage agent guidance prompts and settings. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub agent_guidance_role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub agent_guidance_role: MaybeUndefined, /// The minimum role required to install and connect new integrations. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub integration_creation_role: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub integration_creation_role: MaybeUndefined, } +/// Input for starting a workspace trial on a specific plan. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OrganizationStartTrialInput { /// The plan type to trial. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub plan_type: Option, + pub plan_type: String, } +/// Input for updating the workspace. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OrganizationUpdateInput { - /// The name of the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, - /// The logo of the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub logo_url: Option, - /// The URL key of the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url_key: Option, + /// The name of the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// The logo URL of the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub logo_url: MaybeUndefined, + /// The URL key of the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub url_key: MaybeUndefined, /// How git branches are formatted. If null, default formatting will be used. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_branch_format: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub git_branch_format: MaybeUndefined, /// Whether the Git integration linkback messages should be sent for private repositories. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_linkback_messages_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub git_linkback_messages_enabled: MaybeUndefined, /// Whether the Git integration linkback messages should be sent for public repositories. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_public_linkback_messages_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub git_public_linkback_messages_enabled: MaybeUndefined, /// Whether issue descriptions should be included in Git integration linkback messages. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub git_linkback_descriptions_enabled: Option, - /// Whether the organization is using roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub roadmap_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub git_linkback_descriptions_enabled: MaybeUndefined, + /// Whether the workspace is using roadmap. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub roadmap_enabled: MaybeUndefined, /// The n-weekly frequency at which to prompt for project updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update_reminder_frequency_in_weeks: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update_reminder_frequency_in_weeks: MaybeUndefined, /// The day at which project updates are sent. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update_reminders_day: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update_reminders_day: MaybeUndefined, /// The hour at which project updates are sent. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update_reminders_hour: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update_reminders_hour: MaybeUndefined, /// `ALPHA` The n-weekly frequency at which to prompt for initiative updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_update_reminder_frequency_in_weeks: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_update_reminder_frequency_in_weeks: MaybeUndefined, /// `ALPHA` The day at which initiative updates are sent. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_update_reminders_day: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_update_reminders_day: MaybeUndefined, /// `ALPHA` The hour at which initiative updates are sent. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_update_reminders_hour: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_update_reminders_hour: MaybeUndefined, /// The month at which the fiscal year starts. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub fiscal_year_start_month: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub fiscal_year_start_month: MaybeUndefined, /// `Internal` The list of working days. Sunday is 0, Monday is 1, etc. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub working_days: Option>, - /// Whether the organization has opted for reduced customer support attachment information. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reduced_personal_information: Option, - /// Whether the organization has opted for having to approve all OAuth applications for install. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub oauth_app_review: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub working_days: MaybeUndefined>, + /// Whether the workspace has opted for reduced customer support attachment information. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reduced_personal_information: MaybeUndefined, + /// Whether the workspace has opted for having to approve all OAuth applications for install. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub oauth_app_review: MaybeUndefined, /// List of services that are allowed to be used for login. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub allowed_auth_services: Option>, - /// Internal. Whether SLAs have been enabled for the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sla_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub allowed_auth_services: MaybeUndefined>, + /// Internal. Whether SLAs have been enabled for the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sla_enabled: MaybeUndefined, /// Whether agent invocation is restricted to full workspace members. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub restrict_agent_invocation_to_members: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub restrict_agent_invocation_to_members: MaybeUndefined, /// IP restriction configurations controlling allowed access the workspace. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ip_restrictions: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ip_restrictions: MaybeUndefined>, /// Allowed file upload content types. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub allowed_file_upload_content_types: Option>, - /// `ALPHA` Theme settings for the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub theme_settings: Option, - /// `INTERNAL` Whether the organization is using customers. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customers_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub allowed_file_upload_content_types: MaybeUndefined>, + /// `ALPHA` Theme settings for the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub theme_settings: MaybeUndefined, + /// `INTERNAL` Whether the workspace is using customers. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customers_enabled: MaybeUndefined, /// `INTERNAL` Configuration settings for the Customers feature. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customers_configuration: Option, - /// `INTERNAL` Whether code intelligence is enabled for the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub code_intelligence_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customers_configuration: MaybeUndefined, + /// `INTERNAL` Whether code intelligence is enabled for the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub code_intelligence_enabled: MaybeUndefined, /// `INTERNAL` GitHub repository in owner/repo format for code intelligence. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub code_intelligence_repository: Option, - /// Whether the organization has enabled the feed feature. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub feed_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub code_intelligence_repository: MaybeUndefined, + /// Whether the workspace has enabled the feed feature. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub feed_enabled: MaybeUndefined, /// Whether to hide other workspaces for new users signing up with email domains claimed by this organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub hide_non_primary_organizations: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub hide_non_primary_organizations: MaybeUndefined, /// Default schedule for how often feed summaries are generated. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_feed_summary_schedule: Option, - /// `INTERNAL` Whether the organization has enabled the AI add-on. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ai_addon_enabled: Option, - /// `INTERNAL` Whether the organization has enabled generated updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub generated_updates_enabled: Option, - /// `INTERNAL` Whether the organization has opted in to AI telemetry. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ai_telemetry_enabled: Option, - /// Whether the organization has enabled AI discussion summaries for issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ai_discussion_summaries_enabled: Option, - /// Whether the organization has enabled resolved thread AI summaries. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ai_thread_summaries_enabled: Option, - /// Whether HIPAA compliance is enabled for organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub hipaa_compliance_enabled: Option, - /// The security settings for the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub security_settings: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_feed_summary_schedule: MaybeUndefined, + /// `INTERNAL` Whether the workspace has enabled the AI add-on. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ai_addon_enabled: MaybeUndefined, + /// `INTERNAL` Whether the workspace has enabled agent automation. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub agent_automation_enabled: MaybeUndefined, + /// `INTERNAL` Whether the workspace has enabled generated updates. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub generated_updates_enabled: MaybeUndefined, + /// `INTERNAL` Whether the workspace has opted in to AI telemetry. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ai_telemetry_enabled: MaybeUndefined, + /// Whether the workspace has enabled AI discussion summaries for issues. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ai_discussion_summaries_enabled: MaybeUndefined, + /// Whether the workspace has enabled resolved thread AI summaries. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ai_thread_summaries_enabled: MaybeUndefined, + /// Whether HIPAA compliance is enabled for the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub hipaa_compliance_enabled: MaybeUndefined, + /// The security settings for the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub security_settings: MaybeUndefined, + /// The authentication settings for the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auth_settings: MaybeUndefined, /// `INTERNAL` Configure per-modality AI host providers and model families. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ai_provider_configuration: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ai_provider_configuration: MaybeUndefined, /// The ID of the Slack integration to use for auto-creating project channels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_project_channel_integration_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_channel_integration_id: MaybeUndefined, /// The prefix to use for auto-created Slack project channels (p-, proj-, or project-). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_project_channel_prefix: Option, - /// `Internal` Whether the organization has enabled Linear Agent. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub linear_agent_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_channel_prefix: MaybeUndefined, + /// `Internal` Whether the Slack project channels feature is enabled for the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_project_channels_enabled: MaybeUndefined, + /// `Internal` Whether to automatically create a Slack channel when a new project is created. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_auto_create_project_channel: MaybeUndefined, + /// `Internal` Whether the workspace has enabled Linear Agent. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub linear_agent_enabled: MaybeUndefined, + /// `Internal` Settings for Linear Agent features. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub linear_agent_settings: MaybeUndefined, + /// `INTERNAL` Whether the workspace has enabled the Coding Agent. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub coding_agent_enabled: MaybeUndefined, } /// Customer owner sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct OwnerSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct PagerDutyInput { /// The date when the PagerDuty API failed with an unauthorized error. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub api_failed_with_unauthorized_error_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub api_failed_with_unauthorized_error_at: MaybeUndefined>, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct PartialNotificationChannelPreferencesInput { /// Whether notifications are currently enabled for mobile. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub mobile: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub mobile: MaybeUndefined, /// Whether notifications are currently enabled for desktop. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub desktop: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub desktop: MaybeUndefined, /// Whether notifications are currently enabled for email. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub email: MaybeUndefined, /// Whether notifications are currently enabled for Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack: MaybeUndefined, } /// Issue priority sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct PrioritySort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, /// Whether to consider no priority as the highest or lowest priority - #[serde(default, skip_serializing_if = "Option::is_none")] - pub no_priority_first: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub no_priority_first: MaybeUndefined, } /// Project filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the project name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the project slug ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// `DEPRECATED` Comparator for the project state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state: MaybeUndefined, /// Filters that the project's status must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined>, /// Comparator for the projects priority. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Filters that project labels must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub labels: MaybeUndefined>, /// `Internal` Comparator for the project's content. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub searchable_content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub searchable_content: MaybeUndefined, /// Comparator for the project started date (when it was moved to an "In Progress" status). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub started_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub started_at: MaybeUndefined, /// Comparator for the project completion date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the project cancelation date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub canceled_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub canceled_at: MaybeUndefined, /// Comparator for the project start date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date: MaybeUndefined, /// Comparator for the project target date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// Comparator for the project health: onTrack, atRisk, offTrack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Comparator for the project health (with age): onTrack, atRisk, offTrack, outdated, noUpdate - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health_with_age: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health_with_age: MaybeUndefined, /// `ALPHA` Comparator for the project activity type: buzzin, active, some, none - #[serde(default, skip_serializing_if = "Option::is_none")] - pub activity_type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub activity_type: MaybeUndefined, /// Comparator for filtering projects with relations. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_related_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_related_relations: MaybeUndefined, /// `Deprecated` Comparator for filtering projects which this is depended on by. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_depended_on_by_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_depended_on_by_relations: MaybeUndefined, /// `Deprecated`Comparator for filtering projects which this depends on. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_depends_on_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_depends_on_relations: MaybeUndefined, /// Comparator for filtering projects which are blocked. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocked_by_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocked_by_relations: MaybeUndefined, /// Comparator for filtering projects which are blocking. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocking_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocking_relations: MaybeUndefined, /// Comparator for filtering projects with violated dependencies. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_violated_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_violated_relations: MaybeUndefined, /// Comparator for the project updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_updates: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_updates: MaybeUndefined, /// Filters that the projects creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the projects lead must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lead: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lead: MaybeUndefined>, /// Filters that the projects members must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub members: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub members: MaybeUndefined>, /// Filters that the projects issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issues: MaybeUndefined>, /// Filters that the projects roadmaps must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub roadmaps: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub roadmaps: MaybeUndefined>, /// Filters that the projects initiatives must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiatives: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiatives: MaybeUndefined>, /// Filters that the project's milestones must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestones: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestones: MaybeUndefined>, /// Filters that the project's completed milestones must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_project_milestones: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_project_milestones: MaybeUndefined>, /// Filters that the project's next milestone must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub next_project_milestone: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub next_project_milestone: MaybeUndefined>, /// Filters that the project's team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub accessible_teams: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub accessible_teams: MaybeUndefined>, /// Filters that the last applied template must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template: MaybeUndefined, /// Filters that the project's customer needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// Count of customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_count: MaybeUndefined, /// Count of important customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_important_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_important_count: MaybeUndefined, /// Compound filters, all of which need to be matched by the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some projects. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all projects. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a new project. A name and at least one team are required. All other fields are optional and will use defaults if not specified. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The icon of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, /// The color of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The ID of the project status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_id: MaybeUndefined, /// The description for the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The project content as markdown. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub content: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub content: MaybeUndefined, /// The identifiers of the teams this project is associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_ids: Option>, - /// The ID of the issue from which that project is created. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub converted_from_issue_id: Option, + pub team_ids: Vec, + /// The ID of the issue that was converted into this project. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub converted_from_issue_id: MaybeUndefined, /// The ID of the last template applied to the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template_id: Option, - /// The ID of the template to apply when creating the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template_id: MaybeUndefined, + /// The ID of a project template to apply when creating the project. Overrides useDefaultTemplate if both are provided. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub template_id: MaybeUndefined, /// When set to true, the default project template of the first team provided will be applied. If templateId is provided, this will be ignored. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub use_default_template: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub use_default_template: MaybeUndefined, /// The identifier of the project lead. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lead_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lead_id: MaybeUndefined, /// The identifiers of the members of this project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub member_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub member_ids: MaybeUndefined>, /// The planned start date of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date: MaybeUndefined, /// The resolution of the project's start date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date_resolution: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date_resolution: MaybeUndefined, /// The planned target date of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// The resolution of the project's estimated completion date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date_resolution: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date_resolution: MaybeUndefined, /// The sort order for the project within shared views. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The sort order for the project within shared views, when ordered by priority. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority_sort_order: Option, - /// The priority of the project. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option, - /// `Internal`The identifiers of the project labels associated with this project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority_sort_order: MaybeUndefined, + /// The priority of the project. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, + /// `Internal` The identifiers of the project labels associated with this project. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_ids: MaybeUndefined>, } /// Project creation date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectCreatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Project filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the project name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the project slug ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// `DEPRECATED` Comparator for the project state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub state: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub state: MaybeUndefined, /// Filters that the project's status must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined>, /// Comparator for the projects priority. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Filters that project labels must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub labels: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub labels: MaybeUndefined>, /// `Internal` Comparator for the project's content. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub searchable_content: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub searchable_content: MaybeUndefined, /// Comparator for the project started date (when it was moved to an "In Progress" status). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub started_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub started_at: MaybeUndefined, /// Comparator for the project completion date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Comparator for the project cancelation date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub canceled_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub canceled_at: MaybeUndefined, /// Comparator for the project start date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date: MaybeUndefined, /// Comparator for the project target date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// Comparator for the project health: onTrack, atRisk, offTrack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Comparator for the project health (with age): onTrack, atRisk, offTrack, outdated, noUpdate - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health_with_age: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health_with_age: MaybeUndefined, /// `ALPHA` Comparator for the project activity type: buzzin, active, some, none - #[serde(default, skip_serializing_if = "Option::is_none")] - pub activity_type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub activity_type: MaybeUndefined, /// Comparator for filtering projects with relations. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_related_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_related_relations: MaybeUndefined, /// `Deprecated` Comparator for filtering projects which this is depended on by. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_depended_on_by_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_depended_on_by_relations: MaybeUndefined, /// `Deprecated`Comparator for filtering projects which this depends on. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_depends_on_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_depends_on_relations: MaybeUndefined, /// Comparator for filtering projects which are blocked. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocked_by_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocked_by_relations: MaybeUndefined, /// Comparator for filtering projects which are blocking. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_blocking_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_blocking_relations: MaybeUndefined, /// Comparator for filtering projects with violated dependencies. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_violated_relations: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub has_violated_relations: MaybeUndefined, /// Comparator for the project updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_updates: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_updates: MaybeUndefined, /// Filters that the projects creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the projects lead must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lead: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lead: MaybeUndefined>, /// Filters that the projects members must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub members: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub members: MaybeUndefined>, /// Filters that the projects issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issues: MaybeUndefined>, /// Filters that the projects roadmaps must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub roadmaps: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub roadmaps: MaybeUndefined>, /// Filters that the projects initiatives must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiatives: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiatives: MaybeUndefined>, /// Filters that the project's milestones must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestones: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestones: MaybeUndefined>, /// Filters that the project's completed milestones must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_project_milestones: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_project_milestones: MaybeUndefined>, /// Filters that the project's next milestone must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub next_project_milestone: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub next_project_milestone: MaybeUndefined>, /// Filters that the project's team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub accessible_teams: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub accessible_teams: MaybeUndefined>, /// Filters that the last applied template must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template: MaybeUndefined, /// Filters that the project's customer needs must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub needs: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub needs: MaybeUndefined>, /// Count of customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_count: MaybeUndefined, /// Count of important customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_important_count: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_important_count: MaybeUndefined, /// Compound filters, all of which need to be matched by the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Project health sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectHealthSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Project label filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectLabelCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for whether the label is a group label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_group: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_group: MaybeUndefined, /// Filters that the project labels creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the project label's parent label must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Filter based on the existence of the relation. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Compound filters, all of which need to be matched by the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some project labels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all project labels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a new project label. A name is required. The label is created as a workspace-level label available to all projects. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectLabelCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The description of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The color of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The identifier of the parent label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, /// Whether the label is a group. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_group: Option, - /// When the label was retired. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub retired_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_group: MaybeUndefined, + /// The time at which the label was retired. Set to null to restore a retired label. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub retired_at: MaybeUndefined>, } /// Project label filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectLabelFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for whether the label is a group label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_group: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_group: MaybeUndefined, /// Filters that the project labels creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Filters that the project label's parent label must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, /// Compound filters, all of which need to be matched by the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for updating an existing project label. All fields are optional; only provided fields will be updated. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectLabelUpdateInput { /// The name of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The identifier of the parent label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, /// The color of the label. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// Whether the label is a group. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_group: Option, - /// When the label was retired. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub retired_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_group: MaybeUndefined, + /// The time at which the label was retired. Set to null to restore a retired label. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub retired_at: MaybeUndefined>, } /// Project lead sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectLeadSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Project manual order sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectManualSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Milestone collection filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectMilestoneCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the project milestone name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the project milestone target date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// Filters that the project milestone's project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Compound filters, all of which need to be matched by the milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some milestones. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all milestones. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a new project milestone. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectMilestoneCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The description of the project milestone in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// `Internal` The description of the project milestone as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description_data: MaybeUndefined, /// The planned target date of the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// Related project for the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + pub project_id: String, /// The sort order for the project milestone within a project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } /// Project milestone filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectMilestoneFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the project milestone name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the project milestone target date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// Filters that the project milestone's project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined>, /// Compound filters, all of which need to be matched by the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// `Internal` Input for moving a project milestone to another project. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectMilestoneMoveInput { /// The identifier of the project to move the milestone to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + pub project_id: String, /// The team id to move the attached issues to. This is needed when there is a mismatch between a project's teams and the milestone's issues' teams. Either this or addIssueTeamToProject is required in that situation to resolve constraints. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub new_issue_team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub new_issue_team_id: MaybeUndefined, /// Whether to add each milestone issue's team to the project. This is needed when there is a mismatch between a project's teams and the milestone's issues' teams. Either this or newIssueTeamId is required in that situation to resolve constraints. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub add_issue_team_to_project: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub add_issue_team_to_project: MaybeUndefined, /// A list of issue id to team ids, used for undoing a previous milestone move where the specified issues were moved from the specified teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub undo_issue_team_ids: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub undo_issue_team_ids: MaybeUndefined>, /// A mapping of project id to a previous set of team ids, used for undoing a previous milestone move where the specified teams were added to the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub undo_project_team_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub undo_project_team_ids: MaybeUndefined, } /// `Internal` Used for ProjectMilestoneMoveInput to describe a mapping between an issue and its team. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectMilestoneMoveIssueToTeamInput { /// The issue id in this relationship, you can use * as wildcard if all issues are being moved to the same team - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + pub issue_id: String, /// The team id in this relationship - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + pub team_id: String, } /// `Internal` Used for ProjectMilestoneMoveInput to describe a snapshot of a project and its team ids #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectMilestoneMoveProjectTeamsInput { /// The project id - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + pub project_id: String, /// The team ids for the project - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_ids: Option>, + pub team_ids: Vec, } +/// Input for updating an existing project milestone. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectMilestoneUpdateInput { /// The name of the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the project milestone in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// `Internal` The description of the project milestone as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description_data: MaybeUndefined, /// The planned target date of the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// The sort order for the project milestone within a project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// Related project for the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, } /// Project name sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectNameSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Project priority sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectPrioritySort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, /// Whether to consider no priority as the highest or lowest priority - #[serde(default, skip_serializing_if = "Option::is_none")] - pub no_priority_first: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub no_priority_first: MaybeUndefined, } +/// Input for creating a new project relation. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectRelationCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The type of relation of the project to the related project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + pub r#type: String, /// The identifier of the project that is related to another project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + pub project_id: String, /// The identifier of the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestone_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestone_id: MaybeUndefined, /// The type of the anchor for the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub anchor_type: Option, + pub anchor_type: String, /// The identifier of the related project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_project_id: Option, + pub related_project_id: String, /// The identifier of the related project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_project_milestone_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub related_project_milestone_id: MaybeUndefined, /// The type of the anchor for the related project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_anchor_type: Option, + pub related_anchor_type: String, } +/// Input for updating an existing project relation. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectRelationUpdateInput { /// The type of relation of the project to the related project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// The identifier of the project that is related to another project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// The identifier of the project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_milestone_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_milestone_id: MaybeUndefined, /// The type of the anchor for the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub anchor_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub anchor_type: MaybeUndefined, /// The identifier of the related project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub related_project_id: MaybeUndefined, /// The identifier of the related project milestone. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_project_milestone_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub related_project_milestone_id: MaybeUndefined, /// The type of the anchor for the related project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub related_anchor_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub related_anchor_type: MaybeUndefined, } /// Issue project sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Project sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectSortInput { /// Sort by project name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Sort by project status - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status: MaybeUndefined, /// Sort by project priority - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// Sort by manual order - #[serde(default, skip_serializing_if = "Option::is_none")] - pub manual: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub manual: MaybeUndefined, /// Sort by project target date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// Sort by project start date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date: MaybeUndefined, /// Sort by project creation date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Sort by project update date - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Sort by project health status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Sort by project lead name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lead: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lead: MaybeUndefined, } -#[derive(Debug, Clone, Default, Serialize, Deserialize)] +/// Input for creating a new project status. +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectStatusCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The UI color of the status as a HEX string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + pub color: String, /// Description of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The position of the status in the workspace's project flow. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, + pub position: f64, /// The type of the project status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + pub r#type: ProjectStatusType, /// Whether or not a project can be in this status indefinitely. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub indefinite: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub indefinite: MaybeUndefined, } /// Project status filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectStatusFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the project status name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the project status description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// Comparator for the project status position. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, /// Comparator for the project status type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Filters that the project status projects must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub projects: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub projects: MaybeUndefined>, /// Compound filters, all of which need to be matched by the project status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which needs to be matched by the project status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Project status sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectStatusSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for updating an existing project status. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectStatusUpdateInput { /// The name of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The UI color of the status as a HEX string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// Description of the status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The position of the status in the workspace's project flow. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, /// The type of the project status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Whether or not a project can be in this status indefinitely. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub indefinite: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub indefinite: MaybeUndefined, } +/// Input for creating a new project update. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectUpdateCreateInput { /// The identifier. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The content of the project update in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// `Internal` The content of the project update as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body_data: MaybeUndefined, /// The project to associate the project update with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + pub project_id: String, /// The health of the project at the time of the update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Whether the diff between the current update and the previous one should be hidden. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_diff_hidden: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_diff_hidden: MaybeUndefined, } /// Options for filtering project updates. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectUpdateFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Filters that the project update creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user: MaybeUndefined, /// Filters that the project update project must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project: MaybeUndefined, /// Filters that the project updates reactions must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reactions: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reactions: MaybeUndefined, /// Compound filters, all of which need to be matched by the ProjectUpdate. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the ProjectUpdate. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for updating an existing project. All fields are optional; only provided fields will be updated. Setting a field to null (where supported) will clear the value. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectUpdateInput { /// The ID of the project status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_id: MaybeUndefined, /// The name of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description for the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The project content as markdown. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub content: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub content: MaybeUndefined, /// The ID of the issue from which that project is created. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub converted_from_issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub converted_from_issue_id: MaybeUndefined, /// The ID of the last template applied to the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub last_applied_template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub last_applied_template_id: MaybeUndefined, /// The icon of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, /// The color of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The identifiers of the teams this project is associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_ids: Option>, - /// The time until which project update reminders are paused. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update_reminders_paused_until_at: Option>, - /// The n-weekly frequency at which to prompt for updates. When not set, reminders are inherited from workspace. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_reminder_frequency_in_weeks: Option, - /// The frequency at which to prompt for updates. When not set, reminders are inherited from workspace. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_reminder_frequency: Option, - /// The frequency resolution. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub frequency_resolution: Option, - /// The day at which to prompt for updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_reminders_day: Option, - /// The hour at which to prompt for updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub update_reminders_hour: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_ids: MaybeUndefined>, + /// The time until which project update reminders are paused. Set to null to resume reminders. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update_reminders_paused_until_at: MaybeUndefined>, + /// The n-weekly frequency at which to prompt for project updates. When not set, reminders are inherited from workspace settings. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_reminder_frequency_in_weeks: MaybeUndefined, + /// The frequency at which to prompt for project updates. When not set, reminders are inherited from workspace settings. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_reminder_frequency: MaybeUndefined, + /// The resolution type for the update reminder frequency (e.g., weekly, biweekly). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub frequency_resolution: MaybeUndefined, + /// The day of the week on which to prompt for project updates. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_reminders_day: MaybeUndefined, + /// The hour of the day (0-23) at which to prompt for project updates. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub update_reminders_hour: MaybeUndefined, /// The identifier of the project lead. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub lead_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub lead_id: MaybeUndefined, /// The identifiers of the members of this project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub member_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub member_ids: MaybeUndefined>, /// The planned start date of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date: MaybeUndefined, /// The resolution of the project's start date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date_resolution: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date_resolution: MaybeUndefined, /// The planned target date of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, /// The resolution of the project's estimated completion date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date_resolution: Option, - /// The date when the project was completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub completed_at: Option>, - /// The date when the project was canceled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub canceled_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date_resolution: MaybeUndefined, + /// The time at which the project was completed. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined>, + /// The time at which the project was canceled. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub canceled_at: MaybeUndefined>, /// Whether to send new issue notifications to Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_new_issue: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_new_issue: MaybeUndefined, /// Whether to send new issue comment notifications to Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_comments: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_comments: MaybeUndefined, /// Whether to send issue status update notifications to Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_statuses: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_statuses: MaybeUndefined, /// The sort order for the project in shared views. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The sort order for the project within shared views, when ordered by priority. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority_sort_order: Option, - /// Whether the project has been trashed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub trashed: Option, - /// The priority of the project. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub priority: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority_sort_order: MaybeUndefined, + /// Whether the project has been trashed. Set to true to trash, or null to restore. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub trashed: MaybeUndefined, + /// The priority of the project. 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub priority: MaybeUndefined, /// The identifiers of the project labels associated with this project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_ids: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_ids: MaybeUndefined>, } +/// Input for updating an existing project update. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectUpdateUpdateInput { /// The content of the project update in markdown format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body: MaybeUndefined, /// The content of the project update as a Prosemirror document. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub body_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub body_data: MaybeUndefined, /// The health of the project at the time of the update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Whether the diff between the current update and the previous one should be hidden. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_diff_hidden: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_diff_hidden: MaybeUndefined, } /// Project update date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectUpdatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Collection filtering options for filtering projects by project updates. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectUpdatesCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the project update health. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Compound filters, all of which need to be matched by the project update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the update. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined, /// Filters that needs to be matched by all updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } /// Options for filtering projects by project updates. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ProjectUpdatesFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the project update health. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub health: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub health: MaybeUndefined, /// Compound filters, all of which need to be matched by the project updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the project updates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } -/// Input for referencing a pull request by repository and number. +/// A reference to a pull request by its repository owner, name, and pull request number. Used during release sync to look up pull requests and associate their linked issues with the release. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct PullRequestReferenceInput { /// The owner of the repository (e.g., organization or user name). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub repository_owner: Option, + pub repository_owner: String, /// The name of the repository. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub repository_name: Option, + pub repository_name: String, /// The pull request number. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub number: Option, + pub number: i64, } +/// Input for creating a push subscription to receive push notifications on a device or browser. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct PushSubscriptionCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The data of the subscription in stringified JSON format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub data: Option, - /// Whether this is a subscription payload for Google Cloud Messaging or Apple Push Notification service. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The push subscription data in stringified JSON format. For web subscriptions, this must contain keys, endpoint, and expirationTime fields per the Web Push API specification. For mobile subscriptions, this contains the device token. + pub data: String, + /// The type of push subscription: 'web' for browser-based Web Push API, 'apple' for Apple Push Notification service (or 'appleDevelopment' for sandbox), or 'firebase' for Firebase Cloud Messaging (Android). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, } /// Reaction filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReactionCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the reactions emoji. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub emoji: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub emoji: MaybeUndefined, /// Comparator for the reactions custom emoji. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub custom_emoji_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub custom_emoji_id: MaybeUndefined, /// Compound filters, all of which need to be matched by the reaction. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the reaction. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some reactions. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined, /// Filters that needs to be matched by all reactions. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a new reaction. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReactionCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The emoji the user reacted with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub emoji: Option, + pub emoji: String, /// The comment to associate the reaction with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub comment_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub comment_id: MaybeUndefined, /// The project update to associate the reaction with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_update_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_update_id: MaybeUndefined, /// The update to associate the reaction with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_update_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_update_id: MaybeUndefined, /// The issue to associate the reaction with. Can be a UUID or issue identifier (e.g., 'LIN-123'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_id: MaybeUndefined, /// `Internal` The post to associate the reaction with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub post_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub post_id: MaybeUndefined, /// `Internal` The pull request to associate the reaction with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pull_request_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pull_request_id: MaybeUndefined, /// `Internal` The pull request comment to associate the reaction with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pull_request_comment_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pull_request_comment_id: MaybeUndefined, } /// Reaction filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReactionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the reactions emoji. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub emoji: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub emoji: MaybeUndefined, /// Comparator for the reactions custom emoji. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub custom_emoji_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub custom_emoji_id: MaybeUndefined, /// Compound filters, all of which need to be matched by the reaction. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the reaction. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Comparator for relation existence. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RelationExistsComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, } /// `ALPHA` Release collection filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, + /// Comparator for the release name. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// Comparator for the release version. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// Filters that the release's pipeline must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pipeline: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pipeline: MaybeUndefined>, /// Filters that the release's stage must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub stage: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub stage: MaybeUndefined, + /// Comparator for the release completion date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Compound filters, all of which need to be matched by the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some releases. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all releases. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for completing a release in a specific pipeline. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseCompleteInput { /// The version of the release to complete. If not provided, the latest started release will be completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub version: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// The commit SHA associated with this completion. If a completed release with this SHA already exists, it will be returned instead of completing a new release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub commit_sha: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub commit_sha: MaybeUndefined, /// The identifier of the pipeline to mark a release as completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pipeline_id: Option, + pub pipeline_id: String, } +/// Base input for completing a release. Contains the optional version and commit SHA. The pipeline ID is provided separately or inferred from the access key. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseCompleteInputBase { /// The version of the release to complete. If not provided, the latest started release will be completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub version: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// The commit SHA associated with this completion. If a completed release with this SHA already exists, it will be returned instead of completing a new release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub commit_sha: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub commit_sha: MaybeUndefined, } /// The input for creating a release. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The description of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The version of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub version: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// The commit SHA associated with this release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub commit_sha: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub commit_sha: MaybeUndefined, /// The identifier of the pipeline this release belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pipeline_id: Option, + pub pipeline_id: String, /// The current stage of the release. Defaults to the first 'completed' stage for continuous pipelines, or the first 'started' stage for scheduled pipelines. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub stage_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub stage_id: MaybeUndefined, /// The estimated start date of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date: MaybeUndefined, /// The estimated completion date of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, } -/// Debug sink for release creation diagnostics. +/// Diagnostic data captured during release sync, including inspected commits, discovered issue references, and pull request metadata. Stored on the release for debugging release association issues. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseDebugSinkInput { /// List of commit SHAs that were inspected. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inspected_shas: Option>, + pub inspected_shas: Vec, /// Map of issue identifiers to their source information. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option, + pub issues: serde_json::Value, + /// Map of reverted issue identifiers to their source information. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reverted_issues: MaybeUndefined, /// Pull request debug information. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pull_requests: Option>, + pub pull_requests: Vec, /// List of paths applied during commit scanning. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub include_paths: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub include_paths: MaybeUndefined>, } /// `ALPHA` Release filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, + /// Comparator for the release name. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// Comparator for the release version. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// Filters that the release's pipeline must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pipeline: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pipeline: MaybeUndefined>, /// Filters that the release's stage must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub stage: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub stage: MaybeUndefined, + /// Comparator for the release completion date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub completed_at: MaybeUndefined, /// Compound filters, all of which need to be matched by the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// `ALPHA` Input for creating a release note. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReleaseNoteCreateInput { + /// The identifier in UUID v4 format. If none is provided, the backend will generate one. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// Identifier of the release pipeline. + pub pipeline_id: String, + /// The releases included in this note. + pub release_ids: Vec, +} +/// `ALPHA` Input for updating a release note. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReleaseNoteUpdateInput { + /// The releases included in this note. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_ids: MaybeUndefined>, +} +/// `ALPHA` Release pipeline collection filtering options. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReleasePipelineCollectionFilter { + /// Comparator for the identifier. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// Comparator for the created at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, + /// Comparator for the updated at date. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, + /// Comparator for the pipeline name. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// Comparator for the pipeline production flag. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_production: MaybeUndefined, + /// Filters that the release pipeline's teams must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub teams: MaybeUndefined>, + /// Compound filters, all of which need to be matched by the release pipeline. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, + /// Compound filters, one of which need to be matched by the release pipeline. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, + /// Filters that needs to be matched by some release pipelines. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, + /// Filters that needs to be matched by all release pipelines. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, + /// Comparator for the collection length. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, +} +/// Input for creating a new release pipeline. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleasePipelineCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the pipeline. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The pipeline's unique slug identifier. If not provided, it will be auto-generated. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// The type of the pipeline. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, + /// Whether this pipeline targets a production environment. Default to true. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_production: MaybeUndefined, /// Glob patterns to include commits affecting matching file paths. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub include_path_patterns: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub include_path_patterns: MaybeUndefined>, + /// The identifiers of the teams this pipeline is associated with. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_ids: MaybeUndefined>, } /// `ALPHA` Release pipeline filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleasePipelineFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, + /// Comparator for the pipeline name. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, + /// Comparator for the pipeline production flag. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_production: MaybeUndefined, + /// Filters that the release pipeline's teams must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub teams: MaybeUndefined>, /// Compound filters, all of which need to be matched by the pipeline. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the pipeline. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, +} +/// Release pipeline name sorting options. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReleasePipelineNameSort { + /// Whether nulls should be sorted first or last + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, + /// The order for the individual sort + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, +} +/// Release pipeline sorting options. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReleasePipelineSortInput { + /// Sort by release pipeline name. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, } +/// Input for updating an existing release pipeline. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleasePipelineUpdateInput { /// The name of the pipeline. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The pipeline's unique slug identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// The type of the pipeline. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, + /// Whether this pipeline targets a production environment. Default to true. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_production: MaybeUndefined, /// Glob patterns to include commits affecting matching file paths. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub include_path_patterns: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub include_path_patterns: MaybeUndefined>, + /// The identifiers of the teams this pipeline is associated with. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_ids: MaybeUndefined>, +} +/// `Internal` Issue release sorting options. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReleaseSort { + /// Whether nulls should be sorted first or last + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, + /// The order for the individual sort + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Release sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] +pub struct ReleaseSortInput { + /// Sort by release stage + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub stage: MaybeUndefined, +} +/// Input for creating a new release stage. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] pub struct ReleaseStageCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the stage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The UI color of the stage as a HEX string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + pub color: String, /// The type of the stage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + pub r#type: ReleaseStageType, /// The position of the stage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, + pub position: f64, /// The identifier of the pipeline this stage belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pipeline_id: Option, + pub pipeline_id: String, /// Whether this stage is frozen. Only applicable to started stages. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub frozen: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub frozen: MaybeUndefined, } /// `ALPHA` Release stage filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseStageFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the stage type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Comparator for the stage name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Compound filters, all of which need to be matched by the stage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the stage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, +} +/// Release stage sorting options. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReleaseStageSort { + /// Whether nulls should be sorted first or last + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, + /// The order for the individual sort + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// `ALPHA` Comparator for release stage type. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseStageTypeComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, } +/// Input for updating an existing release stage. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseStageUpdateInput { /// The name of the stage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The UI color of the stage as a HEX string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The position of the stage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, /// Whether this stage is frozen. Only applicable to started stages. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub frozen: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub frozen: MaybeUndefined, } -/// The release data to sync. +/// Input for syncing release data to a specific pipeline. Extends the base sync input with the target pipeline identifier. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseSyncInput { /// The name of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The version of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub version: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// The commit SHA associated with this release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub commit_sha: Option, + pub commit_sha: String, /// Issue references (e.g. ENG-123) to associate with this release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_references: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_references: MaybeUndefined>, + /// Issue references that were reverted and should be removed from the release. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reverted_issue_references: MaybeUndefined>, /// Pull request references to look up. Issues linked to found PRs will be associated with this release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pull_request_references: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pull_request_references: MaybeUndefined>, /// Information about the source repository. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub repository: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub repository: MaybeUndefined, /// Debug information for release creation diagnostics. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub debug_sink: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub debug_sink: MaybeUndefined, /// The identifier of the pipeline this release belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pipeline_id: Option, + pub pipeline_id: String, } -/// Base release sync data without pipeline specification. +/// Base input for syncing release data, containing the commit SHA, issue references, pull request references, and optional metadata. Does not include the pipeline ID, which is provided separately or inferred from the access key. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseSyncInputBase { /// The name of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The version of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub version: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// The commit SHA associated with this release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub commit_sha: Option, + pub commit_sha: String, /// Issue references (e.g. ENG-123) to associate with this release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_references: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_references: MaybeUndefined>, + /// Issue references that were reverted and should be removed from the release. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reverted_issue_references: MaybeUndefined>, /// Pull request references to look up. Issues linked to found PRs will be associated with this release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pull_request_references: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pull_request_references: MaybeUndefined>, /// Information about the source repository. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub repository: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub repository: MaybeUndefined, /// Debug information for release creation diagnostics. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub debug_sink: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub debug_sink: MaybeUndefined, } -/// Input for updating a release by pipeline. +/// Input for updating a release by pipeline identifier. Extends the base update input with the target pipeline identifier. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseUpdateByPipelineInput { /// The version of the release to update. If not provided, the latest started or latest planned release will be updated. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub version: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// The stage name to set. First tries exact match, then falls back to case-insensitive matching with dashes/underscores treated as spaces. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub stage: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub stage: MaybeUndefined, /// The identifier of the pipeline. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pipeline_id: Option, + pub pipeline_id: String, } +/// Base input for updating a release by pipeline. Contains optional version and stage name. The pipeline ID is provided separately or inferred from the access key. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseUpdateByPipelineInputBase { /// The version of the release to update. If not provided, the latest started or latest planned release will be updated. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub version: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// The stage name to set. First tries exact match, then falls back to case-insensitive matching with dashes/underscores treated as spaces. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub stage: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub stage: MaybeUndefined, } +/// Input for updating an existing release. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ReleaseUpdateInput { /// The name of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The version of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub version: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub version: MaybeUndefined, /// The commit SHA associated with this release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub commit_sha: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub commit_sha: MaybeUndefined, /// The identifier of the pipeline this release belongs to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub pipeline_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub pipeline_id: MaybeUndefined, /// The current stage of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub stage_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub stage_id: MaybeUndefined, /// The estimated start date of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub start_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub start_date: MaybeUndefined, /// The estimated completion date of the release. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub target_date: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub target_date: MaybeUndefined, + /// Whether the release has been trashed. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub trashed: MaybeUndefined, } -/// Information about the source repository. +/// Metadata about the source code repository from which a release is being synced, including the hosting provider and repository coordinates. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RepositoryDataInput { /// The owner of the repository (e.g., organization or user name). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option, + pub owner: String, /// The name of the repository. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The VCS provider hosting the repository (e.g., 'github', 'gitlab'). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub provider: Option, + pub provider: String, /// The base URL of the repository on the hosting provider (e.g., ''). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + pub url: String, } /// Customer revenue sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RevenueSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Roadmap collection filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RoadmapCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the roadmap name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the roadmap slug ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// Filters that the roadmap creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Compound filters, all of which need to be matched by the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some roadmaps. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all roadmaps. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } +/// Input for creating a new roadmap. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RoadmapCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The description of the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The owner of the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner_id: Option, - /// The sort order of the roadmap within the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner_id: MaybeUndefined, + /// The sort order of the roadmap within the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The roadmap's color. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, } /// Roadmap filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RoadmapFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the roadmap name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the roadmap slug ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slug_id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slug_id: MaybeUndefined, /// Filters that the roadmap creator must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub creator: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub creator: MaybeUndefined>, /// Compound filters, all of which need to be matched by the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for creating a new roadmap-to-project mapping. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RoadmapToProjectCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The identifier of the project. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + pub project_id: String, /// The identifier of the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub roadmap_id: Option, - /// The sort order for the project within its organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + pub roadmap_id: String, + /// The sort order for the project within its workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } +/// Input for updating an existing roadmap-to-project mapping. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RoadmapToProjectUpdateInput { - /// The sort order for the project within its organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + /// The sort order for the project within its workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } +/// Input for updating an existing roadmap. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RoadmapUpdateInput { /// The name of the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The owner of the roadmap. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner_id: Option, - /// The sort order of the roadmap within the organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner_id: MaybeUndefined, + /// The sort order of the roadmap within the workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, /// The roadmap's color. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, } /// Issue root-issue sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RootIssueSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, /// The sort to apply to the root issues - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort: Option>, + pub sort: Box, } /// `INTERNAL` Comparator for Salesforce metadata. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SalesforceMetadataIntegrationComparator { /// Salesforce Case metadata filter - #[serde(default, skip_serializing_if = "Option::is_none")] - pub case_metadata: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub case_metadata: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SalesforceSettingsInput { /// Whether an internal message should be added when a Linear issue changes status (for status types except completed or canceled). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub send_note_on_status_change: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub send_note_on_status_change: MaybeUndefined, /// Whether an internal message should be added when someone comments on an issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub send_note_on_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub send_note_on_comment: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear issue is completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_completion: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_completion: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear issue is cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_cancellation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_cancellation: MaybeUndefined, /// Whether a ticket should be automatically reopened when a comment is posted on its linked Linear issue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_comment: MaybeUndefined, /// `ALPHA` Whether customer and customer requests should not be automatically created when conversations are linked to a Linear issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub disable_customer_requests_auto_creation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub disable_customer_requests_auto_creation: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear project is completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_project_completion: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_project_completion: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear project is cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_project_cancellation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_project_cancellation: MaybeUndefined, /// Whether Linear Agent should be enabled for this integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enable_ai_intake: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_ai_intake: MaybeUndefined, /// The Salesforce subdomain. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subdomain: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subdomain: MaybeUndefined, /// The Salesforce instance URL. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub url: MaybeUndefined, /// The Salesforce case status to use to reopen cases. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub reopen_case_status: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub reopen_case_status: MaybeUndefined, /// Whether to restrict visibility of the integration to issues that have been either created from Salesforce or linked to Salesforce. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub restrict_visibility: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub restrict_visibility: MaybeUndefined, /// The Salesforce team to use when a template doesn't specify a team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_team: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_team: MaybeUndefined, } /// Filters for semantic search results. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SemanticSearchFilters { /// Filters applied to issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issues: MaybeUndefined, /// Filters applied to projects. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub projects: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub projects: MaybeUndefined, /// Filters applied to initiatives. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiatives: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiatives: MaybeUndefined, /// Filters applied to documents. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub documents: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub documents: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SentrySettingsInput { /// The slug of the Sentry organization being connected. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub organization_slug: Option, + pub organization_slug: String, /// The ID of the Sentry organization being connected. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub organization_id: Option, + pub organization_id: String, /// Whether Sentry issues resolving completes Linear issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub resolving_completes_issues: Option, + pub resolving_completes_issues: bool, /// Whether Sentry issues unresolving reopens Linear issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub unresolving_reopens_issues: Option, + pub unresolving_reopens_issues: bool, } /// Customer size sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SizeSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Comparator for sla status. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SlaStatusComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, } /// Issue SLA status sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SlaStatusSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } -#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SlackAsksSettingsInput { /// Slack workspace name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_name: MaybeUndefined, /// Slack workspace id - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// Enterprise name of the connected Slack enterprise - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enterprise_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enterprise_name: MaybeUndefined, /// Enterprise id of the connected Slack enterprise - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enterprise_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enterprise_id: MaybeUndefined, /// Whether to show unfurl previews in Slack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub should_unfurl: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub should_unfurl: MaybeUndefined, /// Whether to show unfurls in the default style instead of Work Objects in Slack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub should_use_default_unfurl: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub should_use_default_unfurl: MaybeUndefined, /// Whether to allow external users to perform actions on unfurls - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_user_actions: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_user_actions: MaybeUndefined, /// The mapping of Slack channel ID => Slack channel name for connected channels. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_channel_mapping: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_channel_mapping: MaybeUndefined>, /// The user role type that is allowed to manage Asks settings. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub can_administrate: Option, + pub can_administrate: UserRoleType, /// Controls who can see and set Customers when creating Asks in Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub customer_visibility: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub customer_visibility: MaybeUndefined, /// Whether Linear Agent should be enabled for this Slack Asks integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enable_agent: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_agent: MaybeUndefined, /// Whether Linear Agent should be given Org-wide access within Slack workflows. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enable_linear_agent_workflow_access: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_linear_agent_workflow_access: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SlackAsksTeamSettingsInput { /// The Linear team ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + pub id: String, /// Whether the default Asks template is enabled in the given channel for this team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub has_default_ask: Option, + pub has_default_ask: bool, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SlackChannelNameMappingInput { /// The Slack channel ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + pub id: String, /// The Slack channel name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// Whether or not the Slack channel is private. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_private: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_private: MaybeUndefined, /// Whether or not the Slack channel is shared with an external org. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_shared: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_shared: MaybeUndefined, /// Whether or not the Linear Asks bot has been added to this Slack channel. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub bot_added: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub bot_added: MaybeUndefined, /// Which teams are connected to the channel and settings for those teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub teams: Option>>, + pub teams: Vec, /// Whether or not top-level messages in this channel should automatically create Asks. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_create_on_message: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_create_on_message: MaybeUndefined, /// Whether or not using the :ticket: emoji in this channel should automatically create Asks. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_create_on_emoji: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_create_on_emoji: MaybeUndefined, /// Whether or not @-mentioning the bot should automatically create an Ask with the message. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_create_on_bot_mention: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_create_on_bot_mention: MaybeUndefined, /// The optional template ID to use for Asks auto-created in this channel. If not set, auto-created Asks won't use any template. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_create_template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_create_template_id: MaybeUndefined, /// Whether or not synced Slack threads should be updated with a message and emoji when their Ask is canceled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub post_cancellation_updates: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub post_cancellation_updates: MaybeUndefined, /// Whether or not synced Slack threads should be updated with a message and emoji when their Ask is completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub post_completion_updates: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub post_completion_updates: MaybeUndefined, /// Whether or not synced Slack threads should be updated with a message when their Ask is accepted from triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub post_accepted_from_triage_updates: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub post_accepted_from_triage_updates: MaybeUndefined, /// Whether or not to use AI to generate titles for Asks created in this channel. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ai_titles: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ai_titles: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SlackPostSettingsInput { - #[serde(default, skip_serializing_if = "Option::is_none")] - pub channel: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub channel_id: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub configuration_url: Option, - /// Slack workspace id - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub channel_type: Option, + /// The name of the Slack channel. + pub channel: String, + /// The Slack channel ID. + pub channel_id: String, + /// The URL to the Slack integration configuration page. + pub configuration_url: String, + /// The Slack workspace ID. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, + /// The type of the Slack channel (e.g., public, private, or DM). + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub channel_type: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SlackSettingsInput { /// Slack workspace name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_name: MaybeUndefined, /// Slack workspace id - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// Enterprise name of the connected Slack enterprise - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enterprise_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enterprise_name: MaybeUndefined, /// Enterprise id of the connected Slack enterprise - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enterprise_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enterprise_id: MaybeUndefined, /// Whether to show unfurl previews in Slack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub should_unfurl: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub should_unfurl: MaybeUndefined, /// Whether to show unfurls in the default style instead of Work Objects in Slack - #[serde(default, skip_serializing_if = "Option::is_none")] - pub should_use_default_unfurl: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub should_use_default_unfurl: MaybeUndefined, /// Whether to allow external users to perform actions on unfurls - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_user_actions: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_user_actions: MaybeUndefined, /// Whether Linear should automatically respond with issue unfurls when an issue identifier is mentioned in a Slack message. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub link_on_issue_id_mention: Option, + pub link_on_issue_id_mention: bool, /// Whether Linear Agent should be enabled for this Slack integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enable_agent: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_agent: MaybeUndefined, /// Whether Linear Agent should be given Org-wide access within Slack workflows. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enable_linear_agent_workflow_access: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_linear_agent_workflow_access: MaybeUndefined, + /// Whether Code Intelligence should be enabled for this Slack integration. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_code_intelligence: MaybeUndefined, } /// Comparator for issue source type. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SourceMetadataComparator { - /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, - /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, - /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, - /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, /// Comparator for the sub type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sub_type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sub_type: MaybeUndefined, /// `INTERNAL` Comparator for the salesforce metadata. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub salesforce_metadata: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub salesforce_metadata: MaybeUndefined, } /// Comparator for `sourceType` field. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SourceTypeComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Equals case insensitive. Matches any values that matches the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq_ignore_case: MaybeUndefined, /// Not-equals case insensitive. Matches any values that don't match the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq_ignore_case: MaybeUndefined, /// Starts with constraint. Matches any values that start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_with: MaybeUndefined, /// Starts with case insensitive constraint. Matches any values that start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_with_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_with_ignore_case: MaybeUndefined, /// Doesn't start with constraint. Matches any values that don't start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_starts_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_starts_with: MaybeUndefined, /// Ends with constraint. Matches any values that end with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ends_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ends_with: MaybeUndefined, /// Doesn't end with constraint. Matches any values that don't end with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_ends_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_ends_with: MaybeUndefined, /// Contains constraint. Matches any values that contain the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains: MaybeUndefined, /// Contains case insensitive constraint. Matches any values that contain the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains_ignore_case: MaybeUndefined, /// Doesn't contain constraint. Matches any values that don't contain the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_contains: MaybeUndefined, /// Doesn't contain case insensitive constraint. Matches any values that don't contain the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_contains_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_contains_ignore_case: MaybeUndefined, /// Contains case and accent insensitive constraint. Matches any values that contain the given string case and accent insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains_ignore_case_and_accent: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains_ignore_case_and_accent: MaybeUndefined, } /// Project start date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct StartDateSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Comparator for strings. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct StringArrayComparator { /// Length of the array. Matches any values that have the given length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, /// Compound filters, all of which need to be matched. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined, /// Compound filters, one of which needs to be matched. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined, } /// Comparator for strings. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct StringComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Equals case insensitive. Matches any values that matches the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq_ignore_case: MaybeUndefined, /// Not-equals case insensitive. Matches any values that don't match the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq_ignore_case: MaybeUndefined, /// Starts with constraint. Matches any values that start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_with: MaybeUndefined, /// Starts with case insensitive constraint. Matches any values that start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_with_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_with_ignore_case: MaybeUndefined, /// Doesn't start with constraint. Matches any values that don't start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_starts_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_starts_with: MaybeUndefined, /// Ends with constraint. Matches any values that end with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ends_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ends_with: MaybeUndefined, /// Doesn't end with constraint. Matches any values that don't end with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_ends_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_ends_with: MaybeUndefined, /// Contains constraint. Matches any values that contain the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains: MaybeUndefined, /// Contains case insensitive constraint. Matches any values that contain the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains_ignore_case: MaybeUndefined, /// Doesn't contain constraint. Matches any values that don't contain the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_contains: MaybeUndefined, /// Doesn't contain case insensitive constraint. Matches any values that don't contain the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_contains_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_contains_ignore_case: MaybeUndefined, /// Contains case and accent insensitive constraint. Matches any values that contain the given string case and accent insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains_ignore_case_and_accent: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains_ignore_case_and_accent: MaybeUndefined, } /// Comparator for strings in arrays. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct StringItemComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Equals case insensitive. Matches any values that matches the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq_ignore_case: MaybeUndefined, /// Not-equals case insensitive. Matches any values that don't match the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq_ignore_case: MaybeUndefined, /// Starts with constraint. Matches any values that start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_with: MaybeUndefined, /// Starts with case insensitive constraint. Matches any values that start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_with_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub starts_with_ignore_case: MaybeUndefined, /// Doesn't start with constraint. Matches any values that don't start with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_starts_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_starts_with: MaybeUndefined, /// Ends with constraint. Matches any values that end with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ends_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ends_with: MaybeUndefined, /// Doesn't end with constraint. Matches any values that don't end with the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_ends_with: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_ends_with: MaybeUndefined, /// Contains constraint. Matches any values that contain the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains: MaybeUndefined, /// Contains case insensitive constraint. Matches any values that contain the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains_ignore_case: MaybeUndefined, /// Doesn't contain constraint. Matches any values that don't contain the given string. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_contains: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_contains: MaybeUndefined, /// Doesn't contain case insensitive constraint. Matches any values that don't contain the given string case insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub not_contains_ignore_case: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub not_contains_ignore_case: MaybeUndefined, /// Contains case and accent insensitive constraint. Matches any values that contain the given string case and accent insensitive. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub contains_ignore_case_and_accent: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub contains_ignore_case_and_accent: MaybeUndefined, } /// Comparator for source type. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SubTypeComparator { /// Equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub eq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub eq: MaybeUndefined, /// Not-equals constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub neq: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub neq: MaybeUndefined, /// In-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#in: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#in: MaybeUndefined>, /// Not-in-array constraint. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nin: MaybeUndefined>, /// Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub null: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub null: MaybeUndefined, } /// Project target date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TargetDateSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Team collection filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TeamCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Compound filters, all of which need to be matched by the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, /// Filters that the teams parent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, + /// Filters that the team's ancestors must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ancestors: MaybeUndefined>, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TeamCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The description of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The key of the team. If not given, the key will be generated based on the name of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub key: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub key: MaybeUndefined, /// The icon of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, /// The color of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// Whether the team uses cycles. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycles_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycles_enabled: MaybeUndefined, /// The day of the week that a new cycle starts. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_start_day: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_start_day: MaybeUndefined, /// The duration of each cycle in weeks. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_duration: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_duration: MaybeUndefined, /// The cooldown time after each cycle in weeks. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_cooldown_time: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_cooldown_time: MaybeUndefined, /// Auto assign started issues to current active cycle setting. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_issue_auto_assign_started: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_issue_auto_assign_started: MaybeUndefined, /// Auto assign completed issues to current active cycle setting. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_issue_auto_assign_completed: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_issue_auto_assign_completed: MaybeUndefined, /// Only allow issues issues with cycles in Active Issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_lock_to_active: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_lock_to_active: MaybeUndefined, /// How many upcoming cycles to create. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub upcoming_cycle_count: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub upcoming_cycle_count: MaybeUndefined, /// Whether triage mode is enabled for the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub triage_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub triage_enabled: MaybeUndefined, /// Whether an issue needs to have a priority set before leaving triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub require_priority_to_leave_triage: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub require_priority_to_leave_triage: MaybeUndefined, /// The timezone of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub timezone: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub timezone: MaybeUndefined, /// Whether the team should inherit estimation settings from its parent. Only applies to sub-teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inherit_issue_estimation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherit_issue_estimation: MaybeUndefined, /// `Internal` Whether the team should inherit workflow statuses from its parent. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inherit_workflow_statuses: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherit_workflow_statuses: MaybeUndefined, /// The issue estimation type to use. Must be one of "notUsed", "exponential", "fibonacci", "linear", "tShirt". - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_estimation_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_estimation_type: MaybeUndefined, /// Whether to allow zeros in issues estimates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_estimation_allow_zero: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_estimation_allow_zero: MaybeUndefined, /// Whether to move issues to bottom of the column when changing state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub set_issue_sort_order_on_state_change: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub set_issue_sort_order_on_state_change: MaybeUndefined, /// Whether to add additional points to the estimate scale. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_estimation_extended: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_estimation_extended: MaybeUndefined, /// What to use as an default estimate for unestimated issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_issue_estimate: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_issue_estimate: MaybeUndefined, /// Whether to group recent issue history entries. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub group_issue_history: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub group_issue_history: MaybeUndefined, /// The identifier of the default template for members of this team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_template_for_members_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_template_for_members_id: MaybeUndefined, /// The identifier of the default template for non-members of this team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_template_for_non_members_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_template_for_non_members_id: MaybeUndefined, /// The identifier of the default project template of this team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_project_template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_project_template_id: MaybeUndefined, /// Internal. Whether the team is private or not. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub private: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub private: MaybeUndefined, /// Period after which issues are automatically closed, in months. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_close_period: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_close_period: MaybeUndefined, /// The canceled workflow state which auto closed issues will be set to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_close_state_id: Option, - /// Period after which closed and completed issues are automatically archived, in months. 0 means disabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_archive_period: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_close_state_id: MaybeUndefined, + /// Period after which closed (completed, canceled, or duplicate) issues are automatically archived, in months. 0 means disabled. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_archive_period: MaybeUndefined, /// The workflow state into which issues are moved when they are marked as a duplicate of another issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub marked_as_duplicate_workflow_state_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub marked_as_duplicate_workflow_state_id: MaybeUndefined, /// The parent team ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, /// `Internal` Whether the team should inherit its product intelligence scope from its parent. Only applies to sub-teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inherit_product_intelligence_scope: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherit_product_intelligence_scope: MaybeUndefined, /// `Internal` The scope of product intelligence suggestion data for the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub product_intelligence_scope: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub product_intelligence_scope: MaybeUndefined, + /// Whether issue sharing is enabled for this team. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_sharing_enabled: MaybeUndefined, + /// `Internal` Whether the team should inherit its Slack auto-create project channel setting from its parent. Only applies to sub-teams. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherit_slack_auto_create_project_channel: MaybeUndefined, + /// `Internal` Whether to automatically create a Slack channel when a new project is created in this team. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_auto_create_project_channel: MaybeUndefined, } /// Team filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TeamFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the team name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the team key. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub key: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub key: MaybeUndefined, /// Comparator for the team description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// Comparator for the team privacy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub private: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub private: MaybeUndefined, + /// Comparator for the time at which the team was retired. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub retired_at: MaybeUndefined, /// Filters that the teams issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issues: MaybeUndefined>, /// Filters that the teams parent must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent: MaybeUndefined>, + /// Filters that the team's ancestors must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ancestors: MaybeUndefined>, + /// `ALPHA` Filters that the team's release pipelines must satisfy. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_pipelines: MaybeUndefined>, /// Compound filters, all of which need to be matched by the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } +/// Input for creating a new team membership. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TeamMembershipCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The identifier of the user associated with the membership. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_id: Option, + pub user_id: String, /// The identifier of the team associated with the membership. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + pub team_id: String, /// Internal. Whether the user is the owner of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined, /// The position of the item in the users list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } +/// Input for updating an existing team membership. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TeamMembershipUpdateInput { /// Internal. Whether the user is the owner of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined, /// The position of the item in the users list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TeamSecuritySettingsInput { + /// The minimum team role required to share issues with non-team-members. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_sharing: MaybeUndefined, /// The minimum team role required to manage labels in the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_management: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_management: MaybeUndefined, /// The minimum team role required to manage full workspace members (non-guests) in the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub member_management: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub member_management: MaybeUndefined, /// The minimum team role required to manage team settings. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_management: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_management: MaybeUndefined, /// The minimum team role required to manage templates in the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub template_management: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub template_management: MaybeUndefined, } /// Issue team sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TeamSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TeamUpdateInput { /// The name of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The description of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The key of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub key: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub key: MaybeUndefined, /// The icon of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub icon: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, /// The color of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// Whether the team uses cycles. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycles_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycles_enabled: MaybeUndefined, /// The day of the week that a new cycle starts. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_start_day: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_start_day: MaybeUndefined, /// The duration of each cycle in weeks. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_duration: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_duration: MaybeUndefined, /// The cooldown time after each cycle in weeks. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_cooldown_time: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_cooldown_time: MaybeUndefined, /// Auto assign started issues to current active cycle setting. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_issue_auto_assign_started: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_issue_auto_assign_started: MaybeUndefined, /// Auto assign completed issues to current active cycle setting. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_issue_auto_assign_completed: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_issue_auto_assign_completed: MaybeUndefined, /// Only allow issues with cycles in Active Issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_lock_to_active: Option, - /// The date to begin cycles on. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub cycle_enabled_start_date: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_lock_to_active: MaybeUndefined, + /// The time at which to begin cycles. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub cycle_enabled_start_date: MaybeUndefined>, /// How many upcoming cycles to create. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub upcoming_cycle_count: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub upcoming_cycle_count: MaybeUndefined, /// The timezone of the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub timezone: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub timezone: MaybeUndefined, /// Whether the team should inherit estimation settings from its parent. Only applies to sub-teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inherit_issue_estimation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherit_issue_estimation: MaybeUndefined, /// The issue estimation type to use. Must be one of "notUsed", "exponential", "fibonacci", "linear", "tShirt". - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_estimation_type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_estimation_type: MaybeUndefined, /// Whether to allow zeros in issues estimates. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_estimation_allow_zero: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_estimation_allow_zero: MaybeUndefined, /// Whether to move issues to bottom of the column when changing state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub set_issue_sort_order_on_state_change: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub set_issue_sort_order_on_state_change: MaybeUndefined, /// Whether to add additional points to the estimate scale. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issue_estimation_extended: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_estimation_extended: MaybeUndefined, /// What to use as an default estimate for unestimated issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_issue_estimate: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_issue_estimate: MaybeUndefined, /// Whether to send new issue notifications to Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_new_issue: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_new_issue: MaybeUndefined, /// Whether to send new issue comment notifications to Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_comments: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_comments: MaybeUndefined, /// Whether to send issue status update notifications to Slack. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub slack_issue_statuses: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_issue_statuses: MaybeUndefined, /// Whether to group recent issue history entries. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub group_issue_history: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub group_issue_history: MaybeUndefined, /// Whether to enable resolved thread AI summaries. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ai_thread_summaries_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ai_thread_summaries_enabled: MaybeUndefined, /// Whether to enable AI discussion summaries for issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ai_discussion_summaries_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub ai_discussion_summaries_enabled: MaybeUndefined, /// The identifier of the default template for members of this team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_template_for_members_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_template_for_members_id: MaybeUndefined, /// The identifier of the default template for non-members of this team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_template_for_non_members_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_template_for_non_members_id: MaybeUndefined, /// The identifier of the default project template of this team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_project_template_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_project_template_id: MaybeUndefined, /// Whether the team is private or not. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub private: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub private: MaybeUndefined, /// Whether triage mode is enabled for the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub triage_enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub triage_enabled: MaybeUndefined, /// Whether an issue needs to have a priority set before leaving triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub require_priority_to_leave_triage: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub require_priority_to_leave_triage: MaybeUndefined, /// Default status for newly created issues. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub default_issue_state_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub default_issue_state_id: MaybeUndefined, /// Period after which issues are automatically closed, in months. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_close_period: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_close_period: MaybeUndefined, /// The canceled workflow state which auto closed issues will be set to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_close_state_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_close_state_id: MaybeUndefined, /// Whether to automatically close a parent issue in this team if all its sub-issues are closed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_close_parent_issues: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_close_parent_issues: MaybeUndefined, /// Whether to automatically close all sub-issues when a parent issue in this team is closed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_close_child_issues: Option, - /// Period after which closed and completed issues are automatically archived, in months. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub auto_archive_period: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_close_child_issues: MaybeUndefined, + /// Period after which closed (completed, canceled, or duplicate) issues are automatically archived, in months. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub auto_archive_period: MaybeUndefined, /// The workflow state into which issues are moved when they are marked as a duplicate of another issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub marked_as_duplicate_workflow_state_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub marked_as_duplicate_workflow_state_id: MaybeUndefined, /// Whether new users should join this team by default. Mutation restricted to workspace admins or owners! - #[serde(default, skip_serializing_if = "Option::is_none")] - pub join_by_default: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub join_by_default: MaybeUndefined, /// Whether the team is managed by SCIM integration. Mutation restricted to workspace admins or owners and only unsetting is allowed! - #[serde(default, skip_serializing_if = "Option::is_none")] - pub scim_managed: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub scim_managed: MaybeUndefined, /// The parent team ID. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub parent_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub parent_id: MaybeUndefined, /// `Internal` Whether the team should inherit workflow statuses from its parent. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inherit_workflow_statuses: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherit_workflow_statuses: MaybeUndefined, /// `Internal` Whether the team should inherit its product intelligence scope from its parent. Only applies to sub-teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub inherit_product_intelligence_scope: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherit_product_intelligence_scope: MaybeUndefined, /// `Internal` The scope of product intelligence suggestion data for the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub product_intelligence_scope: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub product_intelligence_scope: MaybeUndefined, + /// Whether issue sharing is enabled for this team. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issue_sharing_enabled: MaybeUndefined, + /// `Internal` Whether the team should inherit its Slack auto-create project channel setting from its parent. Only applies to sub-teams. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub inherit_slack_auto_create_project_channel: MaybeUndefined, + /// `Internal` Whether to automatically create a Slack channel when a new project is created in this team. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub slack_auto_create_project_channel: MaybeUndefined, /// The security settings for the team. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub security_settings: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub security_settings: MaybeUndefined, /// Whether all members in the workspace can join the team. Only used for public teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub all_members_can_join: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub all_members_can_join: MaybeUndefined, /// When the team was retired. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub retired_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub retired_at: MaybeUndefined>, /// `Internal` How to handle sub-teams when retiring. Required if the team has active sub-teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub handle_sub_teams_on_retirement: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub handle_sub_teams_on_retirement: MaybeUndefined, } +/// Input for creating a new template. A name, type, and template data are required. If no team is specified, the template is shared across the workspace. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TemplateCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The template type, e.g. 'issue'. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The template type, e.g. 'issue', 'project', or 'document'. + pub r#type: String, /// The identifier or key of the team associated with the template. If not given, the template will be shared across all teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// The template name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The template description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, - /// The template data as JSON encoded attributes of the type of entity, such as an issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub template_data: Option, - /// The position of the template in the templates list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, -} + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// The icon of the template. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, + /// The color of the template icon. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, + /// The template data as JSON-encoded attributes of the target entity type, such as pre-filled issue fields, project configuration, or document content. + pub template_data: serde_json::Value, + /// The sort position of the template in the templates list. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, +} +/// Input for updating an existing template. All fields are optional; only provided fields will be updated. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TemplateUpdateInput { /// The template name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The template description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// The icon of the template. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub icon: MaybeUndefined, + /// The color of the template icon. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The identifier or key of the team associated with the template. If set to null, the template will be shared across all teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, - /// The template data as JSON encoded attributes of the type of entity, such as an issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub template_data: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, + /// The template data as JSON-encoded attributes of the target entity type, such as pre-filled issue fields, project configuration, or document content. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub template_data: MaybeUndefined, /// The position of the template in the templates list. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub sort_order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub sort_order: MaybeUndefined, } /// Customer tier sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TierSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// Issue time in status sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TimeInStatusSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } +/// Input for creating a new time schedule. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TimeScheduleCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The name of the schedule. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The schedule entries. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub entries: Option>>, + pub entries: Vec, /// The unique identifier of the external schedule. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_id: MaybeUndefined, /// The URL to the external schedule. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_url: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TimeScheduleEntryInput { - /// The start date of the schedule in ISO 8601 date-time format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub starts_at: Option>, - /// The end date of the schedule in ISO 8601 date-time format. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub ends_at: Option>, + /// The start time of the schedule entry in ISO 8601 date-time format. + pub starts_at: chrono::DateTime, + /// The end time of the schedule entry in ISO 8601 date-time format. + pub ends_at: chrono::DateTime, /// The Linear user id of the user on schedule. If the user cannot be mapped to a Linear user then `userEmail` can be used as a reference. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user_id: MaybeUndefined, /// The email, name or reference to the user on schedule. This is used in case the external user could not be mapped to a Linear user id. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_email: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user_email: MaybeUndefined, } +/// Input for updating an existing time schedule. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TimeScheduleUpdateInput { /// The name of the schedule. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The schedule entries. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub entries: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub entries: MaybeUndefined>, /// The unique identifier of the external schedule. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_id: MaybeUndefined, /// The URL to the external schedule. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub external_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub external_url: MaybeUndefined, } /// Issue title sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TitleSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TokenUserAccountAuthInput { /// The email which to login via the magic login code. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option, + pub email: String, /// The magic login code. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub token: Option, + pub token: String, /// The timezone of the user's browser. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub timezone: Option, - /// An optional invite link for an organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub invite_link: Option, + pub timezone: String, + /// An optional invite link for a workspace. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub invite_link: MaybeUndefined, + /// Auth code for the client initiating the login sequence. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub client_auth_code: MaybeUndefined, } +/// Input for creating a new triage responsibility. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TriageResponsibilityCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// The identifier of the team associated with the triage responsibility. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + pub team_id: String, /// The action to take when an issue is added to triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub action: Option, + pub action: String, /// The manual selection of users responsible for triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub manual_selection: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub manual_selection: MaybeUndefined, /// The identifier of the time schedule used for scheduling triage responsibility - #[serde(default, skip_serializing_if = "Option::is_none")] - pub time_schedule_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub time_schedule_id: MaybeUndefined, } /// Manual triage responsibility using a set of users. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TriageResponsibilityManualSelectionInput { /// The set of users responsible for triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_ids: Option>, + pub user_ids: Vec, /// `Internal` The index of the current userId used for the assign action when having more than one user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assignment_index: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assignment_index: MaybeUndefined, } +/// Input for updating an existing triage responsibility. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TriageResponsibilityUpdateInput { /// The action to take when an issue is added to triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub action: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub action: MaybeUndefined, /// The manual selection of users responsible for triage. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub manual_selection: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub manual_selection: MaybeUndefined, /// The identifier of the time schedule used for scheduling triage responsibility. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub time_schedule_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub time_schedule_id: MaybeUndefined, } /// Issue update date sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct UpdatedAtSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// User filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct UserCollectionFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the user's name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the user's display name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, /// Comparator for the user's email. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub email: MaybeUndefined, /// Comparator for the user's activity status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub active: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub active: MaybeUndefined, /// Filters that the users assigned issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assigned_issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assigned_issues: MaybeUndefined>, /// Comparator for the user's admin status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub admin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub admin: MaybeUndefined, /// Comparator for the user's owner status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined, /// Comparator for the user's invited status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub invited: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub invited: MaybeUndefined, /// Comparator for the user's invited status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_invited: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_invited: MaybeUndefined, /// Comparator for the user's app status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub app: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub app: MaybeUndefined, /// Filter based on the currently authenticated user. Set to true to filter for the authenticated user, false for any other user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_me: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_me: MaybeUndefined, /// Compound filters, all of which need to be matched by the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, /// Filters that needs to be matched by some users. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub some: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub some: MaybeUndefined>, /// Filters that needs to be matched by all users. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub every: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub every: MaybeUndefined>, /// Comparator for the collection length. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub length: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub length: MaybeUndefined, } /// User display name sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct UserDisplayNameSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } /// User filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct UserFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the user's name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the user's display name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, /// Comparator for the user's email. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub email: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub email: MaybeUndefined, /// Comparator for the user's activity status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub active: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub active: MaybeUndefined, /// Filters that the users assigned issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub assigned_issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub assigned_issues: MaybeUndefined>, /// Comparator for the user's admin status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub admin: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub admin: MaybeUndefined, /// Comparator for the user's owner status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub owner: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub owner: MaybeUndefined, /// Comparator for the user's invited status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub invited: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub invited: MaybeUndefined, /// Comparator for the user's invited status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_invited: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_invited: MaybeUndefined, /// Comparator for the user's app status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub app: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub app: MaybeUndefined, /// Filter based on the currently authenticated user. Set to true to filter for the authenticated user, false for any other user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub is_me: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub is_me: MaybeUndefined, /// Compound filters, all of which need to be matched by the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// User name sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct UserNameSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct UserSettingsUpdateInput { /// The user's settings. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub settings: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub settings: MaybeUndefined, /// Whether this user is subscribed to changelog email or not. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscribed_to_changelog: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscribed_to_changelog: MaybeUndefined, /// Whether this user is subscribed to DPA emails or not. #[serde( rename = "subscribedToDPA", default, - skip_serializing_if = "Option::is_none" + skip_serializing_if = "MaybeUndefined::is_undefined" )] - pub subscribed_to_dpa: Option, + pub subscribed_to_dpa: MaybeUndefined, /// Whether this user is subscribed to invite accepted emails or not. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscribed_to_invite_accepted: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscribed_to_invite_accepted: MaybeUndefined, /// Whether this user is subscribed to privacy and legal update emails or not. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscribed_to_privacy_legal_updates: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscribed_to_privacy_legal_updates: MaybeUndefined, /// Whether this user is subscribed to general marketing communications or not. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subscribed_to_general_marketing_communications: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub subscribed_to_general_marketing_communications: MaybeUndefined, /// The user's notification category preferences. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub notification_category_preferences: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub notification_category_preferences: MaybeUndefined, /// The user's notification channel preferences. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub notification_channel_preferences: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub notification_channel_preferences: + MaybeUndefined, /// The user's notification delivery preferences. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub notification_delivery_preferences: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub notification_delivery_preferences: MaybeUndefined, /// `Internal` The user's usage warning history. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub usage_warning_history: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub usage_warning_history: MaybeUndefined, /// `Internal` How often to generate a feed summary. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub feed_summary_schedule: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub feed_summary_schedule: MaybeUndefined, /// `Internal` The user's last seen time for the pulse feed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub feed_last_seen_time: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub feed_last_seen_time: MaybeUndefined>, } /// User sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct UserSortInput { /// Sort by user name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Sort by user display name - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, } +/// Input for updating the authenticated user. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct UserUpdateInput { /// The name of the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The display name of the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub display_name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub display_name: MaybeUndefined, /// The avatar image URL of the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub avatar_url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub avatar_url: MaybeUndefined, /// The user description or a short bio. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, + /// The user's job title. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub title: MaybeUndefined, /// The emoji part of the user status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_emoji: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_emoji: MaybeUndefined, /// The label part of the user status. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_label: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_label: MaybeUndefined, /// When the user status should be cleared. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub status_until_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub status_until_at: MaybeUndefined>, /// The local timezone of the user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub timezone: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub timezone: MaybeUndefined, } -#[derive(Debug, Clone, Default, Serialize, Deserialize)] +/// Input for creating view preferences. +#[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ViewPreferencesCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The type of view preferences (either user or organization level preferences). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The type of view preferences (either user or workspace level preferences). + pub r#type: ViewPreferencesType, /// The view type of the view preferences are associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub view_type: Option, + pub view_type: ViewType, /// View preferences object. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub preferences: Option, + pub preferences: serde_json::Value, /// The default parameters for the insight on that view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub insights: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub insights: MaybeUndefined, /// The team these view preferences are associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// The project these view preferences are associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_id: MaybeUndefined, /// `Internal` The initiative these view preferences are associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub initiative_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub initiative_id: MaybeUndefined, /// The label these view preferences are associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label_id: MaybeUndefined, /// The project label these view preferences are associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_label_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub project_label_id: MaybeUndefined, + /// The release pipeline these view preferences are associated with. + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub release_pipeline_id: MaybeUndefined, /// The custom view these view preferences are associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub custom_view_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub custom_view_id: MaybeUndefined, /// The user profile these view preferences are associated with. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub user_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub user_id: MaybeUndefined, } +/// Input for updating view preferences. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ViewPreferencesUpdateInput { /// View preferences. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub preferences: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub preferences: MaybeUndefined, /// The default parameters for the insight on that view. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub insights: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub insights: MaybeUndefined, } +/// Input for creating a new webhook. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct WebhookCreateInput { /// Label for the webhook. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label: MaybeUndefined, /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Whether this webhook is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enabled: MaybeUndefined, /// A secret token used to sign the webhook payload. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub secret: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub secret: MaybeUndefined, /// The URL that will be called on data changes. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + pub url: String, /// List of resources the webhook should subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub resource_types: Option>, + pub resource_types: Vec, /// The identifier or key of the team associated with the Webhook. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team_id: MaybeUndefined, /// Whether this webhook is enabled for all public teams. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub all_public_teams: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub all_public_teams: MaybeUndefined, } +/// Input for updating an existing webhook. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct WebhookUpdateInput { /// Label for the webhook. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub label: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub label: MaybeUndefined, /// A secret token used to sign the webhook payload. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub secret: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub secret: MaybeUndefined, /// Whether this webhook is enabled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enabled: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enabled: MaybeUndefined, /// The URL that will be called on data changes. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub url: MaybeUndefined, /// List of resources the webhook should subscribe to. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub resource_types: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub resource_types: MaybeUndefined>, } +/// Input for creating a new workflow state (issue status) in a team. The name, type, color, and team are required. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct WorkflowStateCreateInput { /// The identifier in UUID v4 format. If none is provided, the backend will generate one. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option, - /// The workflow type. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, + /// The workflow state type, which categorizes the state. Valid values: backlog, unstarted, started, completed, canceled. The type determines how the state is treated in workflow progression and reporting. + pub r#type: String, /// The name of the state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + pub name: String, /// The color of the state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + pub color: String, /// The description of the state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The position of the state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, /// The team associated with the state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team_id: Option, + pub team_id: String, } /// Workflow state filtering options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct WorkflowStateFilter { /// Comparator for the identifier. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub id: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub id: MaybeUndefined, /// Comparator for the created at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub created_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub created_at: MaybeUndefined, /// Comparator for the updated at date. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub updated_at: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub updated_at: MaybeUndefined, /// Comparator for the workflow state name. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// Comparator for the workflow state description. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// Comparator for the workflow state position. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option>, - /// Comparator for the workflow state type. Possible values are "triage", "backlog", "unstarted", "started", "completed", "canceled". - #[serde(default, skip_serializing_if = "Option::is_none")] - pub r#type: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, + /// Comparator for the workflow state type. Possible values are "triage", "backlog", "unstarted", "started", "completed", "canceled", "duplicate". + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub r#type: MaybeUndefined, /// Filters that the workflow states team must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub team: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub team: MaybeUndefined>, /// Filters that the workflow states issues must satisfy. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub issues: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub issues: MaybeUndefined>, /// Compound filters, all of which need to be matched by the workflow state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub and: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub and: MaybeUndefined>, /// Compound filters, one of which need to be matched by the workflow state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub or: Option>>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub or: MaybeUndefined>, } /// Issue workflow state sorting options. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct WorkflowStateSort { /// Whether nulls should be sorted first or last - #[serde(default, skip_serializing_if = "Option::is_none")] - pub nulls: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub nulls: MaybeUndefined, /// The order for the individual sort - #[serde(default, skip_serializing_if = "Option::is_none")] - pub order: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub order: MaybeUndefined, /// Whether to sort closed issues by recency - #[serde(default, skip_serializing_if = "Option::is_none")] - pub closed_issues_ordered_by_recency: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub closed_issues_ordered_by_recency: MaybeUndefined, } +/// Input for updating an existing workflow state. All fields are optional; only provided fields will be updated. The state type cannot be changed after creation. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct WorkflowStateUpdateInput { /// The name of the state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub name: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub name: MaybeUndefined, /// The color of the state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub color: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub color: MaybeUndefined, /// The description of the state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub description: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub description: MaybeUndefined, /// The position of the state. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub position: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub position: MaybeUndefined, } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ZendeskSettingsInput { /// Whether an internal message should be added when a Linear issue changes status (for status types except completed or canceled). - #[serde(default, skip_serializing_if = "Option::is_none")] - pub send_note_on_status_change: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub send_note_on_status_change: MaybeUndefined, /// Whether an internal message should be added when someone comments on an issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub send_note_on_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub send_note_on_comment: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear issue is completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_completion: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_completion: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear issue is cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_cancellation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_cancellation: MaybeUndefined, /// Whether a ticket should be automatically reopened when a comment is posted on its linked Linear issue - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_comment: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_comment: MaybeUndefined, /// `ALPHA` Whether customer and customer requests should not be automatically created when conversations are linked to a Linear issue. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub disable_customer_requests_auto_creation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub disable_customer_requests_auto_creation: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear project is completed. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_project_completion: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_project_completion: MaybeUndefined, /// Whether a ticket should be automatically reopened when its linked Linear project is cancelled. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub automate_ticket_reopening_on_project_cancellation: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub automate_ticket_reopening_on_project_cancellation: MaybeUndefined, /// Whether Linear Agent should be enabled for this integration. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub enable_ai_intake: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub enable_ai_intake: MaybeUndefined, /// The subdomain of the Zendesk organization being connected. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub subdomain: Option, + pub subdomain: String, /// The URL of the connected Zendesk organization. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub url: Option, + pub url: String, /// The ID of the Linear bot user. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub bot_user_id: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub bot_user_id: MaybeUndefined, /// `INTERNAL` Temporary flag indicating if the integration has the necessary scopes for Customers - #[serde(default, skip_serializing_if = "Option::is_none")] - pub can_read_customers: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub can_read_customers: MaybeUndefined, /// `INTERNAL` Flag indicating if the integration supports OAuth refresh tokens - #[serde(default, skip_serializing_if = "Option::is_none")] - pub supports_o_auth_refresh: Option, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub supports_o_auth_refresh: MaybeUndefined, /// The host mappings from Zendesk brands. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub host_mappings: Option>, + #[serde(default, skip_serializing_if = "MaybeUndefined::is_undefined")] + pub host_mappings: MaybeUndefined>, } diff --git a/crates/lineark-sdk/src/generated/mutations.rs b/crates/lineark-sdk/src/generated/mutations.rs index c55e6f1..88d2fa9 100644 --- a/crates/lineark-sdk/src/generated/mutations.rs +++ b/crates/lineark-sdk/src/generated/mutations.rs @@ -49,97 +49,6 @@ pub async fn image_upload_from_url( .execute::(&query, variables, "imageUploadFromUrl") .await } -/// Creates a new comment. -/// -/// Full type: [`Comment`](super::types::Comment) -pub async fn comment_create< - T: serde::de::DeserializeOwned - + crate::field_selection::GraphQLFields, ->( - client: &Client, - input: CommentCreateInput, -) -> Result { - let variables = serde_json::json!({ "input" : input }); - let query = String::from( - "mutation CommentCreate($input: CommentCreateInput!) { commentCreate(input: $input) { success comment { ", - ) + &T::selection() + " } } }"; - client - .execute_mutation::(&query, variables, "commentCreate", "comment") - .await -} -/// Updates a comment. -/// -/// Full type: [`Comment`](super::types::Comment) -pub async fn comment_update< - T: serde::de::DeserializeOwned - + crate::field_selection::GraphQLFields, ->( - client: &Client, - skip_edited_at: Option, - input: CommentUpdateInput, - id: String, -) -> Result { - let variables = serde_json::json!( - { "skipEditedAt" : skip_edited_at, "input" : input, "id" : id } - ); - let query = String::from( - "mutation CommentUpdate($skipEditedAt: Boolean, $input: CommentUpdateInput!, $id: String!) { commentUpdate(skipEditedAt: $skipEditedAt, input: $input, id: $id) { success comment { ", - ) + &T::selection() + " } } }"; - client - .execute_mutation::(&query, variables, "commentUpdate", "comment") - .await -} -/// Deletes a comment. -pub async fn comment_delete(client: &Client, id: String) -> Result { - let variables = serde_json::json!({ "id" : id }); - let response_parts: Vec = vec!["success".to_string(), "entityId".to_string()]; - let query = String::from("mutation CommentDelete($id: String!) { commentDelete(id: $id) { ") - + &response_parts.join(" ") - + " } }"; - client - .execute::(&query, variables, "commentDelete") - .await -} -/// Resolves a comment. -/// -/// Full type: [`Comment`](super::types::Comment) -pub async fn comment_resolve< - T: serde::de::DeserializeOwned - + crate::field_selection::GraphQLFields, ->( - client: &Client, - resolving_comment_id: Option, - id: String, -) -> Result { - let variables = serde_json::json!( - { "resolvingCommentId" : resolving_comment_id, "id" : id } - ); - let query = String::from( - "mutation CommentResolve($resolvingCommentId: String, $id: String!) { commentResolve(resolvingCommentId: $resolvingCommentId, id: $id) { success comment { ", - ) + &T::selection() + " } } }"; - client - .execute_mutation::(&query, variables, "commentResolve", "comment") - .await -} -/// Unresolves a comment. -/// -/// Full type: [`Comment`](super::types::Comment) -pub async fn comment_unresolve< - T: serde::de::DeserializeOwned - + crate::field_selection::GraphQLFields, ->( - client: &Client, - id: String, -) -> Result { - let variables = serde_json::json!({ "id" : id }); - let query = String::from( - "mutation CommentUnresolve($id: String!) { commentUnresolve(id: $id) { success comment { ", - ) + &T::selection() - + " } } }"; - client - .execute_mutation::(&query, variables, "commentUnresolve", "comment") - .await -} /// Creates a new project. /// /// Full type: [`Project`](super::types::Project) @@ -180,7 +89,7 @@ pub async fn project_update< .execute_mutation::(&query, variables, "projectUpdate", "project") .await } -/// Deletes (trashes) a project. +/// Deletes (trashes) a project. The project can be restored later with projectUnarchive. /// /// Full type: [`Project`](super::types::Project) pub async fn project_delete< @@ -199,7 +108,7 @@ pub async fn project_delete< .execute_mutation::(&query, variables, "projectDelete", "entity") .await } -/// Creates a new team. The user who creates the team will automatically be added as a member to the newly created team. +/// Creates a new team. The user who creates the team will automatically be added as a member and owner of the newly created team. Default workflow states, labels, and other team resources are created alongside the team. /// /// Full type: [`Team`](super::types::Team) pub async fn team_create< @@ -220,7 +129,7 @@ pub async fn team_create< .execute_mutation::(&query, variables, "teamCreate", "team") .await } -/// Updates a team. +/// Updates a team's settings, properties, or configuration. Requires team owner or workspace admin permissions for most changes. /// /// Full type: [`Team`](super::types::Team) pub async fn team_update< @@ -242,7 +151,7 @@ pub async fn team_update< .execute_mutation::(&query, variables, "teamUpdate", "team") .await } -/// Deletes a team. +/// Archives a team and schedules its data for deletion. Requires team owner or workspace admin permissions. pub async fn team_delete(client: &Client, id: String) -> Result { let variables = serde_json::json!({ "id" : id }); let response_parts: Vec = vec!["success".to_string(), "entityId".to_string()]; @@ -253,7 +162,7 @@ pub async fn team_delete(client: &Client, id: String) -> Result(&query, variables, "teamDelete") .await } -/// Creates a new team membership. +/// Creates a new team membership, adding a user to a team. Validates that the user is not already a member, the team is not archived or retired, and the requesting user has permission to add members. /// /// Full type: [`TeamMembership`](super::types::TeamMembership) pub async fn team_membership_create< @@ -271,7 +180,7 @@ pub async fn team_membership_create< .execute_mutation::(&query, variables, "teamMembershipCreate", "teamMembership") .await } -/// Deletes a team membership. +/// Deletes a team membership, removing the user from the team. Users can remove their own membership, or team owners and workspace admins can remove other members. pub async fn team_membership_delete( client: &Client, also_leave_parent_teams: Option, @@ -596,7 +505,7 @@ pub async fn document_update< .execute_mutation::(&query, variables, "documentUpdate", "document") .await } -/// Deletes (trashes) a document. +/// Deletes (trashes) a document. The document is marked as trashed and archived, but not permanently removed. /// /// Full type: [`Document`](super::types::Document) pub async fn document_delete< @@ -615,3 +524,94 @@ pub async fn document_delete< .execute_mutation::(&query, variables, "documentDelete", "entity") .await } +/// Creates a new comment. +/// +/// Full type: [`Comment`](super::types::Comment) +pub async fn comment_create< + T: serde::de::DeserializeOwned + + crate::field_selection::GraphQLFields, +>( + client: &Client, + input: CommentCreateInput, +) -> Result { + let variables = serde_json::json!({ "input" : input }); + let query = String::from( + "mutation CommentCreate($input: CommentCreateInput!) { commentCreate(input: $input) { success comment { ", + ) + &T::selection() + " } } }"; + client + .execute_mutation::(&query, variables, "commentCreate", "comment") + .await +} +/// Updates a comment. +/// +/// Full type: [`Comment`](super::types::Comment) +pub async fn comment_update< + T: serde::de::DeserializeOwned + + crate::field_selection::GraphQLFields, +>( + client: &Client, + skip_edited_at: Option, + input: CommentUpdateInput, + id: String, +) -> Result { + let variables = serde_json::json!( + { "skipEditedAt" : skip_edited_at, "input" : input, "id" : id } + ); + let query = String::from( + "mutation CommentUpdate($skipEditedAt: Boolean, $input: CommentUpdateInput!, $id: String!) { commentUpdate(skipEditedAt: $skipEditedAt, input: $input, id: $id) { success comment { ", + ) + &T::selection() + " } } }"; + client + .execute_mutation::(&query, variables, "commentUpdate", "comment") + .await +} +/// Deletes a comment. +pub async fn comment_delete(client: &Client, id: String) -> Result { + let variables = serde_json::json!({ "id" : id }); + let response_parts: Vec = vec!["success".to_string(), "entityId".to_string()]; + let query = String::from("mutation CommentDelete($id: String!) { commentDelete(id: $id) { ") + + &response_parts.join(" ") + + " } }"; + client + .execute::(&query, variables, "commentDelete") + .await +} +/// Resolves a comment thread. Marks the root comment as resolved by the current user. +/// +/// Full type: [`Comment`](super::types::Comment) +pub async fn comment_resolve< + T: serde::de::DeserializeOwned + + crate::field_selection::GraphQLFields, +>( + client: &Client, + resolving_comment_id: Option, + id: String, +) -> Result { + let variables = serde_json::json!( + { "resolvingCommentId" : resolving_comment_id, "id" : id } + ); + let query = String::from( + "mutation CommentResolve($resolvingCommentId: String, $id: String!) { commentResolve(resolvingCommentId: $resolvingCommentId, id: $id) { success comment { ", + ) + &T::selection() + " } } }"; + client + .execute_mutation::(&query, variables, "commentResolve", "comment") + .await +} +/// Unresolves a previously resolved comment thread. Clears the resolved state on the root comment. +/// +/// Full type: [`Comment`](super::types::Comment) +pub async fn comment_unresolve< + T: serde::de::DeserializeOwned + + crate::field_selection::GraphQLFields, +>( + client: &Client, + id: String, +) -> Result { + let variables = serde_json::json!({ "id" : id }); + let query = String::from( + "mutation CommentUnresolve($id: String!) { commentUnresolve(id: $id) { success comment { ", + ) + &T::selection() + + " } } }"; + client + .execute_mutation::(&query, variables, "commentUnresolve", "comment") + .await +} diff --git a/crates/lineark-sdk/src/generated/queries.rs b/crates/lineark-sdk/src/generated/queries.rs index 3efb697..406af4e 100644 --- a/crates/lineark-sdk/src/generated/queries.rs +++ b/crates/lineark-sdk/src/generated/queries.rs @@ -12,7 +12,7 @@ use crate::error::LinearError; use crate::field_selection::GraphQLFields; use crate::pagination::Connection; use serde::de::DeserializeOwned; -/// Query builder: All issue workflow states. +/// Query builder: All issue workflow states (issue statuses). Returns a paginated list of workflow states visible to the authenticated user, across all teams they have access to. /// /// Full type: [`WorkflowState`](super::types::WorkflowState) /// @@ -99,7 +99,7 @@ impl<'a, T: DeserializeOwned + GraphQLFields> .await } } -/// Query builder: All projects. +/// Query builder: Returns all projects in the workspace, with optional filtering and sorting. /// /// Full type: [`Project`](super::types::Project) /// @@ -297,7 +297,7 @@ impl<'a, T: DeserializeOwned + GraphQLFields> .await } } -/// Query builder: All teams whose issues can be accessed by the user. This might be different from `administrableTeams`, which also includes teams whose settings can be changed by the user. +/// Query builder: All teams whose issues the user can access. This includes public teams and private teams the user is a member of. This may differ from `administrableTeams`, which returns teams whose settings the user can change but whose issues they don't necessarily have access to. /// /// Full type: [`Team`](super::types::Team) /// @@ -384,7 +384,7 @@ impl<'a, T: DeserializeOwned + GraphQLFields> .await } } -/// Query builder: Search issues. +/// Query builder: Search issues by text query using full-text and vector search. Results are ranked by relevance unless an orderBy parameter is specified. Supports optional issue filters and comment inclusion. Rate-limited to 30 requests per minute. /// /// Full type: [`IssueSearchResult`](super::types::IssueSearchResult) /// @@ -489,7 +489,7 @@ impl<'a, T: DeserializeOwned + GraphQLFields> .await } } -/// Query builder: All issue relationships. +/// Query builder: All issue relations. Returns a paginated list of all issue relations (blocks, blocked by, relates to, duplicates) visible to the authenticated user. /// /// Full type: [`IssueRelation`](super::types::IssueRelation) /// @@ -916,7 +916,7 @@ impl<'a, T: DeserializeOwned + GraphQLFields> .await } } -/// Query builder: All cycles. +/// Query builder: All cycles accessible to the user. /// /// Full type: [`Cycle`](super::types::Cycle) /// @@ -1177,7 +1177,7 @@ impl<'a, T: DeserializeOwned + GraphQLFields> .await } } -/// All issue workflow states. +/// All issue workflow states (issue statuses). Returns a paginated list of workflow states visible to the authenticated user, across all teams they have access to. /// /// Full type: [`WorkflowState`](super::types::WorkflowState) pub fn workflow_states<'a, T>(client: &'a Client) -> WorkflowStatesQueryBuilder<'a, T> { @@ -1193,7 +1193,7 @@ pub fn workflow_states<'a, T>(client: &'a Client) -> WorkflowStatesQueryBuilder< _marker: std::marker::PhantomData, } } -/// All users for the organization. +/// All users in the workspace. Supports filtering, sorting, and pagination. /// /// Full type: [`User`](super::types::User) pub fn users<'a, T>(client: &'a Client) -> UsersQueryBuilder<'a, T> { @@ -1211,7 +1211,7 @@ pub fn users<'a, T>(client: &'a Client) -> UsersQueryBuilder<'a, T> { _marker: std::marker::PhantomData, } } -/// The currently authenticated user. +/// The currently authenticated user making the API request. /// /// Full type: [`User`](super::types::User) pub async fn whoami>( @@ -1222,7 +1222,7 @@ pub async fn whoami(&query, variables, "viewer").await } -/// All projects. +/// Returns all projects in the workspace, with optional filtering and sorting. /// /// Full type: [`Project`](super::types::Project) pub fn projects<'a, T>(client: &'a Client) -> ProjectsQueryBuilder<'a, T> { @@ -1239,7 +1239,7 @@ pub fn projects<'a, T>(client: &'a Client) -> ProjectsQueryBuilder<'a, T> { _marker: std::marker::PhantomData, } } -/// One specific project. +/// Returns a single project by its identifier or URL slug. /// /// Full type: [`Project`](super::types::Project) pub async fn project>( @@ -1254,7 +1254,7 @@ pub async fn project(&query, variables, "project").await } -/// All teams whose issues can be accessed by the user. This might be different from `administrableTeams`, which also includes teams whose settings can be changed by the user. +/// All teams whose issues the user can access. This includes public teams and private teams the user is a member of. This may differ from `administrableTeams`, which returns teams whose settings the user can change but whose issues they don't necessarily have access to. /// /// Full type: [`Team`](super::types::Team) pub fn teams<'a, T>(client: &'a Client) -> TeamsQueryBuilder<'a, T> { @@ -1270,7 +1270,7 @@ pub fn teams<'a, T>(client: &'a Client) -> TeamsQueryBuilder<'a, T> { _marker: std::marker::PhantomData, } } -/// One specific team. +/// Fetches a specific team by its ID. /// /// Full type: [`Team`](super::types::Team) pub async fn team>( @@ -1285,7 +1285,7 @@ pub async fn team(&query, variables, "team").await } -/// Search issues. +/// Search issues by text query using full-text and vector search. Results are ranked by relevance unless an orderBy parameter is specified. Supports optional issue filters and comment inclusion. Rate-limited to 30 requests per minute. /// /// Full type: [`IssueSearchResult`](super::types::IssueSearchResult) pub fn search_issues<'a, T>( @@ -1307,7 +1307,7 @@ pub fn search_issues<'a, T>( _marker: std::marker::PhantomData, } } -/// All project statuses. +/// Returns all project statuses in the workspace. /// /// Full type: [`ProjectStatus`](super::types::ProjectStatus) pub fn project_statuses<'a, T>(client: &'a Client) -> ProjectStatusesQueryBuilder<'a, T> { @@ -1322,7 +1322,7 @@ pub fn project_statuses<'a, T>(client: &'a Client) -> ProjectStatusesQueryBuilde _marker: std::marker::PhantomData, } } -/// All milestones for the project. +/// Returns all project milestones in the workspace, with optional filtering. /// /// Full type: [`ProjectMilestone`](super::types::ProjectMilestone) pub fn project_milestones<'a, T>(client: &'a Client) -> ProjectMilestonesQueryBuilder<'a, T> { @@ -1338,7 +1338,7 @@ pub fn project_milestones<'a, T>(client: &'a Client) -> ProjectMilestonesQueryBu _marker: std::marker::PhantomData, } } -/// One specific project milestone. +/// Returns a single project milestone by its identifier. /// /// Full type: [`ProjectMilestone`](super::types::ProjectMilestone) pub async fn project_milestone< @@ -1357,7 +1357,7 @@ pub async fn project_milestone< .execute::(&query, variables, "projectMilestone") .await } -/// All project labels. +/// Returns all project labels in the workspace, with optional filtering. /// /// Full type: [`ProjectLabel`](super::types::ProjectLabel) pub fn project_labels<'a, T>(client: &'a Client) -> ProjectLabelsQueryBuilder<'a, T> { @@ -1373,7 +1373,7 @@ pub fn project_labels<'a, T>(client: &'a Client) -> ProjectLabelsQueryBuilder<'a _marker: std::marker::PhantomData, } } -/// All issues. +/// All issues. Returns a paginated list of issues visible to the authenticated user. Can be filtered by various criteria including team, assignee, state, labels, project, and cycle. /// /// Full type: [`Issue`](super::types::Issue) pub fn issues<'a, T>(client: &'a Client) -> IssuesQueryBuilder<'a, T> { @@ -1390,7 +1390,7 @@ pub fn issues<'a, T>(client: &'a Client) -> IssuesQueryBuilder<'a, T> { _marker: std::marker::PhantomData, } } -/// One specific issue. +/// One specific issue, looked up by its unique identifier. /// /// Full type: [`Issue`](super::types::Issue) pub async fn issue>( @@ -1428,7 +1428,7 @@ pub async fn issue_vcs_branch_search< .execute::>(&query, variables, "issueVcsBranchSearch") .await } -/// All issue relationships. +/// All issue relations. Returns a paginated list of all issue relations (blocks, blocked by, relates to, duplicates) visible to the authenticated user. /// /// Full type: [`IssueRelation`](super::types::IssueRelation) pub fn issue_relations<'a, T>(client: &'a Client) -> IssueRelationsQueryBuilder<'a, T> { @@ -1443,7 +1443,7 @@ pub fn issue_relations<'a, T>(client: &'a Client) -> IssueRelationsQueryBuilder< _marker: std::marker::PhantomData, } } -/// One specific issue relation. +/// One specific issue relation, looked up by its unique identifier. /// /// Full type: [`IssueRelation`](super::types::IssueRelation) pub async fn issue_relation< @@ -1462,7 +1462,7 @@ pub async fn issue_relation< .execute::(&query, variables, "issueRelation") .await } -/// All issue labels. +/// All issue labels. Returns a paginated list of labels visible to the authenticated user, including both workspace-level and team-scoped labels. /// /// Full type: [`IssueLabel`](super::types::IssueLabel) pub fn issue_labels<'a, T>(client: &'a Client) -> IssueLabelsQueryBuilder<'a, T> { @@ -1478,7 +1478,7 @@ pub fn issue_labels<'a, T>(client: &'a Client) -> IssueLabelsQueryBuilder<'a, T> _marker: std::marker::PhantomData, } } -/// All documents in the workspace. +/// All documents the user has access to in the workspace. /// /// Full type: [`Document`](super::types::Document) pub fn documents<'a, T>(client: &'a Client) -> DocumentsQueryBuilder<'a, T> { @@ -1494,7 +1494,7 @@ pub fn documents<'a, T>(client: &'a Client) -> DocumentsQueryBuilder<'a, T> { _marker: std::marker::PhantomData, } } -/// One specific document. +/// A specific document by ID or slug. /// /// Full type: [`Document`](super::types::Document) pub async fn document>( @@ -1509,7 +1509,7 @@ pub async fn document(&query, variables, "document").await } -/// All cycles. +/// All cycles accessible to the user. /// /// Full type: [`Cycle`](super::types::Cycle) pub fn cycles<'a, T>(client: &'a Client) -> CyclesQueryBuilder<'a, T> { @@ -1525,7 +1525,7 @@ pub fn cycles<'a, T>(client: &'a Client) -> CyclesQueryBuilder<'a, T> { _marker: std::marker::PhantomData, } } -/// One specific cycle. +/// One specific cycle, looked up by ID or slug. /// /// Full type: [`Cycle`](super::types::Cycle) pub async fn cycle>( diff --git a/crates/lineark-sdk/src/generated/types.rs b/crates/lineark-sdk/src/generated/types.rs index 72daf75..73e45a2 100644 --- a/crates/lineark-sdk/src/generated/types.rs +++ b/crates/lineark-sdk/src/generated/types.rs @@ -4,48 +4,21 @@ use super::enums::*; use crate::field_selection::GraphQLFields; use serde::{Deserialize, Serialize}; -/// `Internal` An access key for CI/CD integrations. -#[derive(Debug, Clone, Default, Serialize, Deserialize)] -#[serde(rename_all = "camelCase", default)] -pub struct AccessKey { - /// The unique identifier of the entity. - pub id: Option, - /// The time at which the entity was created. - pub created_at: Option>, - /// The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't - /// been updated after creation. - pub updated_at: Option>, - /// The time at which the entity was archived. Null if the entity has not been archived. - pub archived_at: Option>, - /// Organization the API key belongs to. - pub organization: Option>, - /// The user who created the access key. - pub creator: Option>, - /// When the access key was last used. - pub last_used_at: Option>, - /// When the access key was revoked. - pub revoked_at: Option>, -} -impl GraphQLFields for AccessKey { - type FullType = Self; - fn selection() -> String { - "id createdAt updatedAt archivedAt lastUsedAt revokedAt".into() - } -} -/// A bot actor is an actor that is not a user, but an application or integration. +/// A bot actor representing a non-human entity that performed an action, such as an integration (GitHub, Slack, Zendesk), an AI assistant, or an automated workflow. Bot actors are displayed in activity feeds and history to indicate when changes were made by applications rather than users. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct ActorBot { + /// A unique identifier for the bot actor. pub id: Option, - /// The type of bot. + /// The source type of the bot, identifying the application or integration (e.g., 'github', 'slack', 'workflow', 'ai'). pub r#type: Option, - /// The sub type of the bot. + /// A more specific classification within the bot type, providing additional context about the integration or application variant. pub sub_type: Option, /// The display name of the bot. pub name: Option, - /// The display name of the external user on behalf of which the bot acted. + /// The display name of the external user on behalf of whom the bot acted. Shown when an integration action was triggered by a specific person in the external system. pub user_display_name: Option, - /// A url pointing to the avatar representing this bot. + /// A URL pointing to the avatar image representing this bot, typically the integration's logo or icon. pub avatar_url: Option, } impl GraphQLFields for ActorBot { @@ -54,7 +27,7 @@ impl GraphQLFields for ActorBot { "id type subType name userDisplayName avatarUrl".into() } } -/// An activity within an agent context. +/// An activity performed by or directed at an AI coding agent during a session. Activities represent the observable steps of an agent's work, including thoughts, actions (tool calls), responses, prompts from users, errors, and elicitation requests. Each activity belongs to an agent session and is associated with the user who initiated it. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentActivity { @@ -68,26 +41,26 @@ pub struct AgentActivity { /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, /// The agent session this activity belongs to. - pub agent_session: Option>, - /// The comment this activity is linked to. - pub source_comment: Option>, + pub agent_session: Option, + /// The source comment this activity is linked to. Null if the activity was not triggered by a comment. + pub source_comment: Option, /// The user who created this agent activity. - pub user: Option>, + pub user: Option, /// Metadata about the external source that created this agent activity. pub source_metadata: Option, /// An optional modifier that provides additional instructions on how the activity should be interpreted. pub signal: Option, - /// Metadata about this agent activity's signal. - pub signal_metadata: Option, /// Whether the activity is ephemeral, and should disappear after the next agent activity. pub ephemeral: Option, /// `Internal` Metadata about user-provided contextual information for this agent activity. pub contextual_metadata: Option, + /// Metadata about this agent activity's signal. + pub signal_metadata: Option, } impl GraphQLFields for AgentActivity { type FullType = Self; fn selection() -> String { - "id createdAt updatedAt archivedAt sourceMetadata signal signalMetadata ephemeral contextualMetadata" + "id createdAt updatedAt archivedAt sourceMetadata signal ephemeral contextualMetadata signalMetadata" .into() } } @@ -115,9 +88,9 @@ impl GraphQLFields for AgentActivityActionContent { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentActivityConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for AgentActivityConnection { type FullType = Self; @@ -128,7 +101,7 @@ impl GraphQLFields for AgentActivityConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentActivityEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -172,13 +145,14 @@ impl GraphQLFields for AgentActivityErrorContent { "type body bodyData".into() } } +/// The result of an agent activity mutation. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentActivityPayload { /// The identifier of the last sync operation. pub last_sync_id: Option, /// The agent activity that was created or updated. - pub agent_activity: Option>, + pub agent_activity: Option, /// Whether the operation was successful. pub success: Option, } @@ -239,7 +213,7 @@ impl GraphQLFields for AgentActivityThoughtContent { "type body bodyData".into() } } -/// A session for agent activities and state management. +/// A session representing an AI coding agent's work on an issue or conversation. Agent sessions track the lifecycle of an agent's engagement, from creation through active work to completion or dismissal. Each session is associated with an agent user (the bot), optionally a human creator, an issue, and a comment thread where the agent posts updates. Sessions contain activities that record the agent's observable steps and can be linked to pull requests created during the work. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentSession { @@ -262,52 +236,54 @@ pub struct AgentSession { pub source_comment: Option>, /// The issue this agent session is associated with. pub issue: Option>, - /// The current status of the agent session. + /// The agent session's unique URL slug. + pub slug_id: Option, + /// The current status of the agent session, such as pending, active, awaiting input, complete, error, or stale. pub status: Option, - /// The time the agent session started. + /// The time the agent session transitioned to active status and began work. Null if the session has not yet started. pub started_at: Option>, - /// The time the agent session ended. + /// The time the agent session completed. Null if the session is still in progress or was dismissed before completion. pub ended_at: Option>, - /// The time the agent session was dismissed. + /// The time a user dismissed this agent session. When dismissed, the agent is removed as delegate from the associated issue. Null if the session has not been dismissed. pub dismissed_at: Option>, - /// The user who dismissed the agent session. + /// The user who dismissed the agent session. Automatically set when dismissedAt is updated. Null if the session has not been dismissed. pub dismissed_by: Option>, /// Activities associated with this agent session. - pub activities: Option>, + pub activities: Option, /// The URL of an external agent-hosted page associated with this session. pub external_link: Option, - /// A summary of the activities in this session. + /// A human-readable summary of the work performed in this session. Null if no summary has been generated yet. pub summary: Option, /// Metadata about the external source that created this agent session. pub source_metadata: Option, - /// A dynamically updated list of the agent's execution strategy. + /// A dynamically updated plan describing the agent's execution strategy, including steps to be taken and their current status. Updated as the agent progresses through its work. Null if no plan has been set. pub plan: Option, - /// Serialized JSON representing the contexts this session is related to, for direct chat sessions. + /// The entity contexts this session is related to, such as issues or projects referenced in direct chat sessions. Used to provide contextual awareness to the agent. pub context: Option, /// `DEPRECATED` The type of the agent session. pub r#type: Option, - /// Agent session URL. + /// The URL to the agent session page in the Linear app. Null for direct chat sessions without an associated issue. pub url: Option, /// `Internal` Pull requests associated with this agent session. - pub pull_requests: Option>, + pub pull_requests: Option, /// External links associated with this session. - pub external_links: Option>>, + pub external_links: Option>, /// URLs of external resources associated with this session. pub external_urls: Option, } impl GraphQLFields for AgentSession { type FullType = Self; fn selection() -> String { - "id createdAt updatedAt archivedAt status startedAt endedAt dismissedAt externalLink summary sourceMetadata plan context type url externalUrls" + "id createdAt updatedAt archivedAt slugId status startedAt endedAt dismissedAt externalLink summary sourceMetadata plan context type url externalUrls" .into() } } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentSessionConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for AgentSessionConnection { type FullType = Self; @@ -318,7 +294,7 @@ impl GraphQLFields for AgentSessionConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentSessionEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -351,7 +327,7 @@ pub struct AgentSessionPayload { /// Whether the operation was successful. pub success: Option, /// The agent session that was created or updated. - pub agent_session: Option>, + pub agent_session: Option, } impl GraphQLFields for AgentSessionPayload { type FullType = Self; @@ -359,7 +335,7 @@ impl GraphQLFields for AgentSessionPayload { "lastSyncId success".into() } } -/// Join table between agent sessions and pull requests. +/// A link between an agent session and a pull request created or associated during that session. This join entity tracks which pull requests were produced by or connected to a coding agent's work session, and handles backfilling links when pull requests are synced after the agent has already recorded the URL. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentSessionToPullRequest { @@ -373,9 +349,9 @@ pub struct AgentSessionToPullRequest { /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, /// The pull request that the agent session is associated with. - pub pull_request: Option>, + pub pull_request: Option, /// The agent session that the pull request is associated with. - pub agent_session: Option>, + pub agent_session: Option, } impl GraphQLFields for AgentSessionToPullRequest { type FullType = Self; @@ -386,9 +362,9 @@ impl GraphQLFields for AgentSessionToPullRequest { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentSessionToPullRequestConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for AgentSessionToPullRequestConnection { type FullType = Self; @@ -399,7 +375,7 @@ impl GraphQLFields for AgentSessionToPullRequestConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AgentSessionToPullRequestEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -409,10 +385,10 @@ impl GraphQLFields for AgentSessionToPullRequestEdge { "cursor".into() } } -/// AI prompt rules for a team. +/// `Internal` A conversation between a user and the Linear AI assistant. Each conversation tracks the full thread state, context references (issues, projects, documents, etc.), and conversation parts (prompts, text responses, tool calls, widgets). Conversations can originate from direct chat, issue comments, Slack threads, Microsoft Teams, or automated workflows. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct AiPromptRules { +pub struct AiConversation { /// The unique identifier of the entity. pub id: Option, /// The time at which the entity was created. @@ -422,221 +398,1176 @@ pub struct AiPromptRules { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The user who last updated the AI prompt rules. - pub updated_by: Option>, + /// The user who the conversation belongs to. + pub user: Option, + /// The entity contexts this conversation is related to, such as issues, projects, or documents that provide context for the AI assistant. + pub context: Option, + /// A summary of the conversation. + pub summary: Option, + /// The conversation's unique URL slug. + pub slug_id: Option, + /// `Internal` The workflow definition that created this conversation. + pub workflow_definition: Option, + /// The source from which this conversation was initiated, such as direct chat, an issue comment, a Slack thread, Microsoft Teams, or a workflow automation. + pub initial_source: Option, + /// The current processing status of the conversation, indicating whether the AI is actively generating a response or has completed its turn. + pub status: Option, + /// The time when the user marked the conversation as read. Null if the user hasn't read the conversation. + pub read_at: Option>, + /// The iteration ID when this conversation is part of an agentic workflow. Used to track multi-step workflow executions. Null for non-workflow conversations. + pub iteration_id: Option, + /// `Internal` The log ID of the AI response. + pub eval_log_id: Option, } -impl GraphQLFields for AiPromptRules { +impl GraphQLFields for AiConversation { type FullType = Self; fn selection() -> String { - "id createdAt updatedAt archivedAt".into() + "id createdAt updatedAt archivedAt context summary slugId initialSource status readAt iterationId evalLogId" + .into() } } -/// Public information of the OAuth application. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct Application { - /// OAuth application's ID. - pub id: Option, - /// OAuth application's client ID. - pub client_id: Option, - /// Application name. - pub name: Option, - /// Information about the application. - pub description: Option, - /// Name of the developer. - pub developer: Option, - /// Url of the developer (homepage or docs). - pub developer_url: Option, - /// Image of the application. - pub image_url: Option, +pub struct AiConversationCodeIntelligenceToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, } -impl GraphQLFields for Application { +impl GraphQLFields for AiConversationCodeIntelligenceToolCall { type FullType = Self; fn selection() -> String { - "id clientId name description developer developerUrl imageUrl".into() + "name rawArgs rawResult".into() } } -/// Contains requested archived model objects. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct ArchiveResponse { - /// A JSON serialized collection of model objects loaded from the archive - pub archive: Option, - /// The total number of entities in the archive. - pub total_count: Option, - /// The version of the remote database. Incremented by 1 for each migration run on the database. - pub database_version: Option, - /// Whether the dependencies for the model objects are included in the archive. - pub includes_dependencies: Option>, +pub struct AiConversationCodeIntelligenceToolCallArgs { + pub question: Option, } -impl GraphQLFields for ArchiveResponse { +impl GraphQLFields for AiConversationCodeIntelligenceToolCallArgs { type FullType = Self; fn selection() -> String { - "archive totalCount databaseVersion includesDependencies".into() + "question".into() } } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct AsksChannelConnectPayload { - /// The identifier of the last sync operation. - pub last_sync_id: Option, - /// The integration that was created or updated. - pub integration: Option>, - /// Whether the operation was successful. - pub success: Option, - /// The new Asks Slack channel mapping for the connected channel. - pub mapping: Option>, - /// Whether the bot needs to be manually added to the channel. - pub add_bot: Option, +pub struct AiConversationCreateEntityToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, } -impl GraphQLFields for AsksChannelConnectPayload { +impl GraphQLFields for AiConversationCreateEntityToolCall { type FullType = Self; fn selection() -> String { - "lastSyncId success addBot".into() + "name rawArgs rawResult".into() } } -/// A web page for an Asks web form. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct AsksWebPage { - /// The unique identifier of the entity. - pub id: Option, - /// The time at which the entity was created. - pub created_at: Option>, - /// The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't - /// been updated after creation. - pub updated_at: Option>, - /// The time at which the entity was archived. Null if the entity has not been archived. - pub archived_at: Option>, - /// The organization that the Asks web page belongs to. - pub organization: Option>, - /// The Asks web settings this page belongs to. - pub asks_web_settings: Option>, - /// The user who created the Asks web page. - pub creator: Option>, - /// The title of the page. - pub title: Option, - /// The description of the page. - pub description: Option, - /// The page's unique URL slug. - pub slug_id: Option, - /// The auto-reply message for issue created. If not set, the default reply will be used. - pub issue_created_auto_reply: Option, - /// Whether the auto-reply for issue created is enabled. - pub issue_created_auto_reply_enabled: Option, - /// The auto-reply message for issue completed. If not set, the default reply will be used. - pub issue_completed_auto_reply: Option, - /// Whether the auto-reply for issue completed is enabled. - pub issue_completed_auto_reply_enabled: Option, - /// The auto-reply message for issue canceled. If not set, the default reply will be used. - pub issue_canceled_auto_reply: Option, - /// Whether the auto-reply for issue canceled is enabled. - pub issue_canceled_auto_reply_enabled: Option, +pub struct AiConversationCreateEntityToolCallArgs { + pub r#type: Option, + pub count: Option, } -impl GraphQLFields for AsksWebPage { +impl GraphQLFields for AiConversationCreateEntityToolCallArgs { type FullType = Self; fn selection() -> String { - "id createdAt updatedAt archivedAt title description slugId issueCreatedAutoReply issueCreatedAutoReplyEnabled issueCompletedAutoReply issueCompletedAutoReplyEnabled issueCanceledAutoReply issueCanceledAutoReplyEnabled" - .into() + "type count".into() } } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct AsksWebPagePayload { - /// The identifier of the last sync operation. - pub last_sync_id: Option, - /// The Asks web page that was created or updated. - pub asks_web_page: Option>, - /// Whether the operation was successful. - pub success: Option, +pub struct AiConversationDeleteEntityToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, } -impl GraphQLFields for AsksWebPagePayload { +impl GraphQLFields for AiConversationDeleteEntityToolCall { type FullType = Self; fn selection() -> String { - "lastSyncId success".into() + "name rawArgs rawResult".into() } } -/// Settings for an Asks web form. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct AsksWebSettings { - /// The unique identifier of the entity. +pub struct AiConversationDeleteEntityToolCallArgs { + pub entity: Option, +} +impl GraphQLFields for AiConversationDeleteEntityToolCallArgs { + type FullType = Self; + fn selection() -> String { + "".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationEntityCardWidget { + /// The name of the widget. + pub name: Option, + /// The arguments of the widget. + pub raw_args: Option, + /// Display information for the widget, including ProseMirror and Markdown representations. + pub display_info: Option, + /// The arguments to the widget. + pub args: Option, +} +impl GraphQLFields for AiConversationEntityCardWidget { + type FullType = Self; + fn selection() -> String { + "name rawArgs".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationEntityCardWidgetArgs { + /// `Internal` The entity type + pub r#type: Option, + /// The UUID of the entity to display pub id: Option, - /// The time at which the entity was created. - pub created_at: Option>, - /// The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't - /// been updated after creation. - pub updated_at: Option>, - /// The time at which the entity was archived. Null if the entity has not been archived. - pub archived_at: Option>, - /// The organization that the Asks web settings are associated with. - pub organization: Option>, - /// The user who created the Asks web settings. - pub creator: Option>, - /// The custom domain for the Asks web form. If null, the default Linear-hosted domain will be used. - pub domain: Option, - /// The email intake address associated with these Asks web settings. - pub email_intake_address: Option>, - /// The identity provider for SAML authentication on this Asks web form. - pub identity_provider: Option>, + /// @deprecated Optional note to display about the entity + pub note: Option, + /// The action performed on the entity (leave empty if just found) + pub action: Option, } -impl GraphQLFields for AsksWebSettings { +impl GraphQLFields for AiConversationEntityCardWidgetArgs { type FullType = Self; fn selection() -> String { - "id createdAt updatedAt archivedAt domain".into() + "type id note action".into() } } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct AsksWebSettingsPayload { - /// The identifier of the last sync operation. - pub last_sync_id: Option, - /// The Asks web settings that were created or updated. - pub asks_web_settings: Option>, - /// Whether the operation was successful. - pub success: Option, +pub struct AiConversationEntityListWidget { + /// The name of the widget. + pub name: Option, + /// The arguments of the widget. + pub raw_args: Option, + /// Display information for the widget, including ProseMirror and Markdown representations. + pub display_info: Option, + /// The arguments to the widget. + pub args: Option, } -impl GraphQLFields for AsksWebSettingsPayload { +impl GraphQLFields for AiConversationEntityListWidget { type FullType = Self; fn selection() -> String { - "lastSyncId success".into() + "name rawArgs".into() } } -/// Issue attachment (e.g. support ticket, pull request). #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct Attachment { - /// The unique identifier of the entity. +pub struct AiConversationEntityListWidgetArgs { + /// Total number of entities in the list + pub count: Option, + pub entities: Option>, + /// The action performed on the entities (leave empty if just found) + pub action: Option, +} +impl GraphQLFields for AiConversationEntityListWidgetArgs { + type FullType = Self; + fn selection() -> String { + "count action".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationEntityListWidgetArgsEntities { + /// `Internal` The entity type + pub r#type: Option, + /// Entity UUID pub id: Option, - /// The time at which the entity was created. - pub created_at: Option>, - /// The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't - /// been updated after creation. - pub updated_at: Option>, - /// The time at which the entity was archived. Null if the entity has not been archived. - pub archived_at: Option>, - /// Content for the title line in the Linear attachment widget. + /// @deprecated Optional note to display about the entity + pub note: Option, +} +impl GraphQLFields for AiConversationEntityListWidgetArgsEntities { + type FullType = Self; + fn selection() -> String { + "type id note".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationGetMicrosoftTeamsConversationHistoryToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, +} +impl GraphQLFields for AiConversationGetMicrosoftTeamsConversationHistoryToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationGetPullRequestDiffToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationGetPullRequestDiffToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationGetPullRequestDiffToolCallArgs { + pub entity: Option, +} +impl GraphQLFields for AiConversationGetPullRequestDiffToolCallArgs { + type FullType = Self; + fn selection() -> String { + "".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationGetPullRequestFileToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationGetPullRequestFileToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationGetPullRequestFileToolCallArgs { + pub entity: Option, + pub path: Option, +} +impl GraphQLFields for AiConversationGetPullRequestFileToolCallArgs { + type FullType = Self; + fn selection() -> String { + "path".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationGetSlackConversationHistoryToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, +} +impl GraphQLFields for AiConversationGetSlackConversationHistoryToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationHandoffToCodingSessionToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationHandoffToCodingSessionToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationHandoffToCodingSessionToolCallArgs { + pub entity: Option, + pub instructions: Option, +} +impl GraphQLFields for AiConversationHandoffToCodingSessionToolCallArgs { + type FullType = Self; + fn selection() -> String { + "instructions".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationInvokeMcpToolToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationInvokeMcpToolToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationInvokeMcpToolToolCallArgs { + pub server: Option, + pub tool: Option, +} +impl GraphQLFields for AiConversationInvokeMcpToolToolCallArgs { + type FullType = Self; + fn selection() -> String { + "".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationInvokeMcpToolToolCallArgsServer { + pub integration_id: Option, + pub name: Option, pub title: Option, - /// Content for the subtitle line in the Linear attachment widget. - pub subtitle: Option, - /// Location of the attachment which is also used as an identifier. - pub url: Option, - /// The creator of the attachment. - pub creator: Option>, - /// The non-Linear user who created the attachment. - pub external_user_creator: Option>, - /// Custom metadata related to the attachment. +} +impl GraphQLFields for AiConversationInvokeMcpToolToolCallArgsServer { + type FullType = Self; + fn selection() -> String { + "integrationId name title".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationInvokeMcpToolToolCallArgsTool { + pub name: Option, + pub title: Option, +} +impl GraphQLFields for AiConversationInvokeMcpToolToolCallArgsTool { + type FullType = Self; + fn selection() -> String { + "name title".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationNavigateToPageToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, + /// The result of the tool call. + pub result: Option, +} +impl GraphQLFields for AiConversationNavigateToPageToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationNavigateToPageToolCallArgs { + pub entity_type: Option, + pub identifier: Option, +} +impl GraphQLFields for AiConversationNavigateToPageToolCallArgs { + type FullType = Self; + fn selection() -> String { + "entityType identifier".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationNavigateToPageToolCallResult { + pub url: Option, + pub new_tab: Option, +} +impl GraphQLFields for AiConversationNavigateToPageToolCallResult { + type FullType = Self; + fn selection() -> String { + "url newTab".into() + } +} +/// Metadata about a part in an AI conversation. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationPartMetadata { + /// The turn ID of the part. + pub turn_id: Option, + /// The eval log ID of the part. + pub eval_log_id: Option, + /// The time when the part started, as an ISO 8601 string. + pub started_at: Option, + /// The time when the part ended, as an ISO 8601 string. + pub ended_at: Option, + /// The phase during which the part was generated. + pub phase: Option, + /// AI feedback state for this part. + pub feedback: Option, +} +impl GraphQLFields for AiConversationPartMetadata { + type FullType = Self; + fn selection() -> String { + "turnId evalLogId startedAt endedAt phase feedback".into() + } +} +/// A prompt part in an AI conversation. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationPromptPart { + /// The ID of the part. + pub id: Option, + /// The type of the part. + pub r#type: Option, + /// The metadata of the part. + pub metadata: Option, + /// The data of the prompt part. + pub body_data: Option, + /// The Markdown body of the prompt part. + pub body: Option, + /// The user who created the prompt part. + pub user: Option, +} +impl GraphQLFields for AiConversationPromptPart { + type FullType = Self; + fn selection() -> String { + "id type bodyData body".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationQueryActivityToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationQueryActivityToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationQueryActivityToolCallArgs { + pub entities: Option>, +} +impl GraphQLFields for AiConversationQueryActivityToolCallArgs { + type FullType = Self; + fn selection() -> String { + "".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationQueryUpdatesToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationQueryUpdatesToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationQueryUpdatesToolCallArgs { + pub update_type: Option, + pub entity: Option, +} +impl GraphQLFields for AiConversationQueryUpdatesToolCallArgs { + type FullType = Self; + fn selection() -> String { + "updateType".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationQueryViewToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationQueryViewToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationQueryViewToolCallArgs { + pub view: Option, + pub mode: Option, + pub filter: Option, +} +impl GraphQLFields for AiConversationQueryViewToolCallArgs { + type FullType = Self; + fn selection() -> String { + "mode filter".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationQueryViewToolCallArgsView { + pub r#type: Option, + pub group: Option, + pub predefined_view: Option, +} +impl GraphQLFields for AiConversationQueryViewToolCallArgsView { + type FullType = Self; + fn selection() -> String { + "type predefinedView".into() + } +} +/// A reasoning part in an AI conversation. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationReasoningPart { + /// The ID of the part. + pub id: Option, + /// The type of the part. + pub r#type: Option, + /// The metadata of the part. + pub metadata: Option, + /// The title of the reasoning part. + pub title: Option, + /// The data of the reasoning part. + pub body_data: Option, + /// The Markdown body of the reasoning part. + pub body: Option, +} +impl GraphQLFields for AiConversationReasoningPart { + type FullType = Self; + fn selection() -> String { + "id type title bodyData body".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationResearchToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, + /// The result of the tool call. + pub result: Option, +} +impl GraphQLFields for AiConversationResearchToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationResearchToolCallArgs { + pub context: Option, + pub query: Option, + pub subjects: Option>, +} +impl GraphQLFields for AiConversationResearchToolCallArgs { + type FullType = Self; + fn selection() -> String { + "context query".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationResearchToolCallResult { + pub progress_id: Option, +} +impl GraphQLFields for AiConversationResearchToolCallResult { + type FullType = Self; + fn selection() -> String { + "progressId".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationRestoreEntityToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationRestoreEntityToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationRestoreEntityToolCallArgs { + pub entity: Option, +} +impl GraphQLFields for AiConversationRestoreEntityToolCallArgs { + type FullType = Self; + fn selection() -> String { + "".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationRetrieveEntitiesToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationRetrieveEntitiesToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationRetrieveEntitiesToolCallArgs { + pub entities: Option>, +} +impl GraphQLFields for AiConversationRetrieveEntitiesToolCallArgs { + type FullType = Self; + fn selection() -> String { + "".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationSearchDocumentationToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, +} +impl GraphQLFields for AiConversationSearchDocumentationToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationSearchEntitiesToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, + /// The result of the tool call. + pub result: Option, +} +impl GraphQLFields for AiConversationSearchEntitiesToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationSearchEntitiesToolCallArgs { + pub r#type: Option, + pub queries: Option>, +} +impl GraphQLFields for AiConversationSearchEntitiesToolCallArgs { + type FullType = Self; + fn selection() -> String { + "type queries".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationSearchEntitiesToolCallResult { + pub entities: Option>, +} +impl GraphQLFields for AiConversationSearchEntitiesToolCallResult { + type FullType = Self; + fn selection() -> String { + "".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationSearchEntitiesToolCallResultEntities { + pub r#type: Option, + pub id: Option, +} +impl GraphQLFields for AiConversationSearchEntitiesToolCallResultEntities { + type FullType = Self; + fn selection() -> String { + "type id".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationSuggestValuesToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationSuggestValuesToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationSuggestValuesToolCallArgs { + pub field: Option, + pub query: Option, +} +impl GraphQLFields for AiConversationSuggestValuesToolCallArgs { + type FullType = Self; + fn selection() -> String { + "field query".into() + } +} +/// A text part in an AI conversation. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationTextPart { + /// The ID of the part. + pub id: Option, + /// The type of the part. + pub r#type: Option, + /// The metadata of the part. + pub metadata: Option, + /// The data of the text part. + pub body_data: Option, + /// The Markdown body of the text part. + pub body: Option, +} +impl GraphQLFields for AiConversationTextPart { + type FullType = Self; + fn selection() -> String { + "id type bodyData body".into() + } +} +/// A tool call part in an AI conversation. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationToolCallPart { + /// The ID of the part. + pub id: Option, + /// The type of the part. + pub r#type: Option, + /// The metadata of the part. + pub metadata: Option, +} +impl GraphQLFields for AiConversationToolCallPart { + type FullType = Self; + fn selection() -> String { + "id type".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationToolDisplayInfo { + pub icon: Option, + pub active_label: Option, + pub inactive_label: Option, + pub detail: Option, + pub result: Option, +} +impl GraphQLFields for AiConversationToolDisplayInfo { + type FullType = Self; + fn selection() -> String { + "icon activeLabel inactiveLabel detail result".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationTranscribeMediaToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, +} +impl GraphQLFields for AiConversationTranscribeMediaToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationTranscribeVideoToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, +} +impl GraphQLFields for AiConversationTranscribeVideoToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationUpdateEntityToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationUpdateEntityToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationUpdateEntityToolCallArgs { + pub entity: Option, + pub entities: Option>, +} +impl GraphQLFields for AiConversationUpdateEntityToolCallArgs { + type FullType = Self; + fn selection() -> String { + "".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationWebSearchToolCall { + /// The name of the tool that was called. + pub name: Option, + pub display_info: Option, + /// The arguments of the tool call. + pub raw_args: Option, + /// The result of the tool call. + pub raw_result: Option, + /// The arguments to the tool call. + pub args: Option, +} +impl GraphQLFields for AiConversationWebSearchToolCall { + type FullType = Self; + fn selection() -> String { + "name rawArgs rawResult".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationWebSearchToolCallArgs { + pub query: Option, + pub url: Option, +} +impl GraphQLFields for AiConversationWebSearchToolCallArgs { + type FullType = Self; + fn selection() -> String { + "query url".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationWidgetDisplayInfo { + /// The ProseMirror data representation of the widget content. + pub body_data: Option, + /// The Markdown representation of the widget content. + pub body: Option, +} +impl GraphQLFields for AiConversationWidgetDisplayInfo { + type FullType = Self; + fn selection() -> String { + "bodyData body".into() + } +} +/// A widget part in an AI conversation. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiConversationWidgetPart { + /// The ID of the part. + pub id: Option, + /// The type of the part. + pub r#type: Option, + /// The metadata of the part. + pub metadata: Option, +} +impl GraphQLFields for AiConversationWidgetPart { + type FullType = Self; + fn selection() -> String { + "id type".into() + } +} +/// `Internal` Tracks the progress and state of an AI prompt workflow execution. Each progress record is associated with an issue or comment and contains the workflow type, current status, metadata about the execution, and optionally the conversation messages exchanged during the workflow. Progress records can form a hierarchy via parent-child relationships for multi-step workflows. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiPromptProgress { + /// The unique identifier of the entity. + pub id: Option, + /// The time at which the entity was created. + pub created_at: Option>, + /// The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't + /// been updated after creation. + pub updated_at: Option>, + /// The time at which the entity was archived. Null if the entity has not been archived. + pub archived_at: Option>, + /// `Internal` The type of AI prompt workflow. + pub r#type: Option, + /// `Internal` The status of the prompt workflow. + pub status: Option, + /// `Internal` The metadata for the prompt workflow. + pub metadata: Option, + /// `Internal` The log ID for the prompt workflow, if available. + pub log_id: Option, +} +impl GraphQLFields for AiPromptProgress { + type FullType = Self; + fn selection() -> String { + "id createdAt updatedAt archivedAt type status metadata logId".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiPromptProgressConnection { + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, +} +impl GraphQLFields for AiPromptProgressConnection { + type FullType = Self; + fn selection() -> String { + "".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiPromptProgressEdge { + pub node: Option, + /// Used in `before` and `after` args + pub cursor: Option, +} +impl GraphQLFields for AiPromptProgressEdge { + type FullType = Self; + fn selection() -> String { + "cursor".into() + } +} +/// Custom rules that guide AI behavior for a specific scope. Rules can be defined at the workspace level, team level, integration level, or user level, and are applied hierarchically (workspace rules first, then parent team rules, then team rules). Rules contain structured content that instructs the AI assistant on how to handle specific types of prompts, such as coding agent guidance or triage intelligence configuration. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AiPromptRules { + /// The unique identifier of the entity. + pub id: Option, + /// The time at which the entity was created. + pub created_at: Option>, + /// The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't + /// been updated after creation. + pub updated_at: Option>, + /// The time at which the entity was archived. Null if the entity has not been archived. + pub archived_at: Option>, + /// The user who last updated the AI prompt rules. + pub updated_by: Option>, +} +impl GraphQLFields for AiPromptRules { + type FullType = Self; + fn selection() -> String { + "id createdAt updatedAt archivedAt".into() + } +} +/// Public-facing information about an OAuth application. Contains only the fields that are safe to display to users during the authorization flow, excluding sensitive data like client secrets and internal configuration. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct Application { + /// OAuth application's ID. + pub id: Option, + /// OAuth application's client ID. + pub client_id: Option, + /// Application name. + pub name: Option, + /// Information about the application. + pub description: Option, + /// Name of the developer. + pub developer: Option, + /// URL of the developer's website, homepage, or documentation. + pub developer_url: Option, + /// Image of the application. + pub image_url: Option, +} +impl GraphQLFields for Application { + type FullType = Self; + fn selection() -> String { + "id clientId name description developer developerUrl imageUrl".into() + } +} +/// Contains requested archived model objects. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct ArchiveResponse { + /// A JSON serialized collection of model objects loaded from the archive + pub archive: Option, + /// The total number of entities in the archive. + pub total_count: Option, + /// The version of the remote database. Incremented by 1 for each migration run on the database. + pub database_version: Option, + /// Whether the dependencies for the model objects are included in the archive. + pub includes_dependencies: Option>, +} +impl GraphQLFields for ArchiveResponse { + type FullType = Self; + fn selection() -> String { + "archive totalCount databaseVersion includesDependencies".into() + } +} +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct AsksChannelConnectPayload { + /// The identifier of the last sync operation. + pub last_sync_id: Option, + /// The integration that was created or updated. + pub integration: Option, + /// Whether the operation was successful. + pub success: Option, + /// The new Asks Slack channel mapping for the connected channel. + pub mapping: Option, + /// Whether the bot needs to be manually added to the channel. + pub add_bot: Option, +} +impl GraphQLFields for AsksChannelConnectPayload { + type FullType = Self; + fn selection() -> String { + "lastSyncId success addBot".into() + } +} +/// An attachment linking external content to an issue. Attachments represent connections to external resources such as GitHub pull requests, Slack messages, Zendesk tickets, Figma files, Sentry issues, Intercom conversations, and plain URLs. Each attachment has a title and subtitle displayed in the Linear UI, a URL serving as both the link destination and unique identifier per issue, and optional metadata specific to the source integration. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct Attachment { + /// The unique identifier of the entity. + pub id: Option, + /// The time at which the entity was created. + pub created_at: Option>, + /// The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't + /// been updated after creation. + pub updated_at: Option>, + /// The time at which the entity was archived. Null if the entity has not been archived. + pub archived_at: Option>, + /// Content for the title line in the Linear attachment widget. + pub title: Option, + /// Content for the subtitle line in the Linear attachment widget. + pub subtitle: Option, + /// The URL of the external resource this attachment links to. Also serves as a unique identifier for the attachment within an issue; no two attachments on the same issue can share the same URL. + pub url: Option, + /// The creator of the attachment. + pub creator: Option, + /// The non-Linear user who created the attachment. + pub external_user_creator: Option, + /// Integration-specific metadata for this attachment. The schema varies by source type and may include fields such as pull request status, review counts, commit information, ticket status, or other data from the external system. pub metadata: Option, /// Information about the source which created the attachment. pub source: Option, - /// An accessor helper to source.type, defines the source type of the attachment. + /// The source type of the attachment, derived from the source metadata. Returns the integration type (e.g., 'github', 'slack', 'zendesk') or 'unknown' if no source is set. pub source_type: Option, - /// Indicates if attachments for the same source application should be grouped in the Linear UI. + /// Whether attachments from the same source application should be visually grouped together in the Linear issue detail view. pub group_by_source: Option, - /// The issue this attachment was originally created on. Will be undefined if the attachment hasn't been moved. - pub original_issue: Option>, + /// The issue this attachment was originally created on. Null if the attachment hasn't been moved. + pub original_issue: Option, /// The issue this attachment belongs to. - pub issue: Option>, + pub issue: Option, /// The body data of the attachment, if any. pub body_data: Option, } @@ -650,9 +1581,9 @@ impl GraphQLFields for Attachment { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AttachmentConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for AttachmentConnection { type FullType = Self; @@ -663,7 +1594,7 @@ impl GraphQLFields for AttachmentConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AttachmentEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -673,13 +1604,14 @@ impl GraphQLFields for AttachmentEdge { "cursor".into() } } +/// The result of an attachment mutation. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AttachmentPayload { /// The identifier of the last sync operation. pub last_sync_id: Option, /// The issue attachment that was created. - pub attachment: Option>, + pub attachment: Option, /// Whether the operation was successful. pub success: Option, } @@ -689,6 +1621,7 @@ impl GraphQLFields for AttachmentPayload { "lastSyncId success".into() } } +/// The result of an attachment sources query. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AttachmentSourcesPayload { @@ -701,7 +1634,7 @@ impl GraphQLFields for AttachmentSourcesPayload { "sources".into() } } -/// Workspace audit log entry object. +/// A workspace audit log entry recording a security or compliance-relevant action. Audit entries capture who performed an action, when, from what IP address and country, and include type-specific metadata. The audit log is partitioned by time for performance and is accessible only to workspace administrators. Examples of audited actions include user authentication events, permission changes, data exports, and workspace setting modifications. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AuditEntry { @@ -714,16 +1647,17 @@ pub struct AuditEntry { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, + /// The type of audited action (e.g., user authentication, permission change, data export, setting modification). pub r#type: Option, - /// The organization the audit log belongs to. - pub organization: Option>, + /// The workspace the audit log belongs to. + pub organization: Option, /// The user that caused the audit entry to be created. - pub actor: Option>, + pub actor: Option, /// The ID of the user that caused the audit entry to be created. pub actor_id: Option, - /// IP from actor when entry was recorded. + /// The IP address of the actor at the time the audited action was performed. Null if the IP was not captured. pub ip: Option, - /// Country code of request resulting to audit entry. + /// The ISO 3166-1 alpha-2 country code derived from the request IP address. Null if geo-location could not be determined. pub country_code: Option, /// Additional metadata related to the audit entry. pub metadata: Option, @@ -740,9 +1674,9 @@ impl GraphQLFields for AuditEntry { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AuditEntryConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for AuditEntryConnection { type FullType = Self; @@ -753,7 +1687,7 @@ impl GraphQLFields for AuditEntryConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AuditEntryEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -843,12 +1777,16 @@ pub struct AuthOrganization { pub saml_settings: Option, /// Allowed authentication providers, empty array means all are allowed pub allowed_auth_services: Option>, + /// Authentication settings for the organization. + pub auth_settings: Option, /// Whether SCIM provisioning is enabled for organization. pub scim_enabled: Option, /// The email domain or URL key for the organization. pub service_id: Option, /// The region the organization is hosted in. pub region: Option, + /// An approximate count of users, updated once per day. + pub approximate_user_count: Option, /// Whether to hide other organizations for new users signing up with email domains claimed by this organization. pub hide_non_primary_organizations: Option, pub user_count: Option, @@ -856,7 +1794,7 @@ pub struct AuthOrganization { impl GraphQLFields for AuthOrganization { type FullType = Self; fn selection() -> String { - "createdAt id name enabled urlKey previousUrlKeys logoUrl deletionRequestedAt releaseChannel samlEnabled samlSettings allowedAuthServices scimEnabled serviceId region hideNonPrimaryOrganizations userCount" + "createdAt id name enabled urlKey previousUrlKeys logoUrl deletionRequestedAt releaseChannel samlEnabled samlSettings allowedAuthServices authSettings scimEnabled serviceId region approximateUserCount hideNonPrimaryOrganizations userCount" .into() } } @@ -870,13 +1808,13 @@ pub struct AuthResolverResponse { /// Should the signup flow allow access for the domain. pub allow_domain_access: Option, /// List of active users that belong to the user account. - pub users: Option>>, + pub users: Option>, /// List of locked users that are locked by login restrictions - pub locked_users: Option>>, + pub locked_users: Option>, /// List of organizations allowing this user account to join automatically. - pub available_organizations: Option>>, + pub available_organizations: Option>, /// List of organization available to this user account but locked due to the current auth method. - pub locked_organizations: Option>>, + pub locked_organizations: Option>, /// ID of the organization last accessed by the user. pub last_used_organization_id: Option, /// The authentication service used for the current session (e.g., google, email, saml). @@ -912,9 +1850,9 @@ pub struct AuthUser { /// User account ID the user belongs to. pub user_account_id: Option, /// Organization the user belongs to. - pub organization: Option>, + pub organization: Option, /// `INTERNAL` Identity provider the user is managed by. - pub identity_provider: Option>, + pub identity_provider: Option, } impl GraphQLFields for AuthUser { type FullType = Self; @@ -922,7 +1860,7 @@ impl GraphQLFields for AuthUser { "createdAt id name displayName email avatarUrl role active userAccountId".into() } } -/// Authentication session information. +/// Information about an active authentication session, including the device, location, and timestamps for when it was created and last used. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct AuthenticationSessionResponse { @@ -961,17 +1899,72 @@ pub struct AuthenticationSessionResponse { pub client: Option, /// Name of the session, derived from the client and operating system pub name: Option, - /// Identifies the session used to make the request. + /// Detailed name of the session including version information, derived from the user agent. + pub detailed_name: Option, + /// Whether this session is the one used to make the current API request. pub is_current_session: Option, } impl GraphQLFields for AuthenticationSessionResponse { type FullType = Self; fn selection() -> String { - "createdAt id type ip locationCountry locationCountryCode countryCodes locationRegionCode locationCity userAgent browserType service lastActiveAt updatedAt location operatingSystem client name isCurrentSession" + "createdAt id type ip locationCountry locationCountryCode countryCodes locationRegionCode locationCity userAgent browserType service lastActiveAt updatedAt location operatingSystem client name detailedName isCurrentSession" + .into() + } +} +/// `Internal` Detailed information about the coding agent sandbox environment associated with an agent session, including cloud infrastructure URLs for debugging and monitoring. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct CodingAgentSandboxEntry { + /// The sandbox identifier. + pub id: Option, + /// The user who initiated the session. + pub creator_id: Option, + /// The URL of the running sandbox environment. Null when the sandbox is hibernated or destroyed. + pub sandbox_url: Option, + /// URL to the sandbox execution logs in Modal. Null if the sandbox has no URL or is not running on Modal. + pub sandbox_logs_url: Option, + /// The Claude Agent SDK session ID used for resuming multi-turn conversations with the sandbox worker. + pub worker_conversation_id: Option, + /// GitHub repository in owner/repo format. + pub repository: Option, + /// The Git branch name created for this sandbox session. Null if a branch has not yet been assigned. + pub branch_name: Option, + /// The Git ref (branch, tag, or commit) that was checked out as the base for this sandbox. Defaults to the repository's default branch. + pub base_ref: Option, + /// The time at which the sandbox was created. + pub created_at: Option>, + /// The time at which the sandbox first became active. Null if not yet started. + pub started_at: Option>, + /// The time at which the session reached a terminal state. Null if still active. + pub ended_at: Option>, +} +impl GraphQLFields for CodingAgentSandboxEntry { + type FullType = Self; + fn selection() -> String { + "id creatorId sandboxUrl sandboxLogsUrl workerConversationId repository branchName baseRef createdAt startedAt endedAt" .into() } } -/// A comment associated with an issue. +/// `Internal` Coding agent sandbox details for an agent session. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +#[serde(rename_all = "camelCase", default)] +pub struct CodingAgentSandboxPayload { + /// The agent session identifier. + pub agent_session_id: Option, + /// All sandbox containers for this session, oldest first. + pub sandboxes: Option>, + /// Datadog logs URL covering all sandboxes in the session. + pub datadog_logs_url: Option, + /// Temporal URL to view workflows for this session. + pub temporal_workflows_url: Option, +} +impl GraphQLFields for CodingAgentSandboxPayload { + type FullType = Self; + fn selection() -> String { + "agentSessionId datadogLogsUrl temporalWorkflowsUrl".into() + } +} +/// A comment associated with an issue, project update, initiative update, document content, post, project, or initiative. Comments support rich text (ProseMirror), emoji reactions, and threaded replies via parentId. Comments can be created by workspace users or by external users through integrations (e.g., Slack, Intercom). Each comment belongs to exactly one parent entity. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct Comment { @@ -984,90 +1977,102 @@ pub struct Comment { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The comment content in markdown format. + /// The comment content in markdown format. This is a derived representation of the canonical bodyData ProseMirror content. pub body: Option, - /// The issue that the comment is associated with. + /// The issue that the comment is associated with. Null if the comment belongs to a different parent entity type. pub issue: Option>, - /// The ID of the issue that the comment is associated with. + /// The ID of the issue that the comment is associated with. Null if the comment belongs to a different parent entity type. pub issue_id: Option, - /// The document content that the comment is associated with. + /// The document content that the comment is associated with. Null if the comment belongs to a different parent entity type. Used for inline comments on documents. pub document_content: Option>, - /// The ID of the document content that the comment is associated with. + /// The ID of the document content that the comment is associated with. Null if the comment belongs to a different parent entity type. pub document_content_id: Option, - /// The project update that the comment is associated with. + /// The project update that the comment is associated with. Null if the comment belongs to a different parent entity type. pub project_update: Option>, - /// The ID of the project update that the comment is associated with. + /// The ID of the project update that the comment is associated with. Null if the comment belongs to a different parent entity type. pub project_update_id: Option, - /// The initiative update that the comment is associated with. + /// The initiative update that the comment is associated with. Null if the comment belongs to a different parent entity type. pub initiative_update: Option>, - /// The ID of the initiative update that the comment is associated with. + /// The ID of the initiative update that the comment is associated with. Null if the comment belongs to a different parent entity type. pub initiative_update_id: Option, - /// The post that the comment is associated with. + /// The post that the comment is associated with. Null if the comment belongs to a different parent entity type. pub post: Option>, - /// The parent comment under which the current comment is nested. + /// `Internal` The project that the comment is associated with. Used for project-level discussion threads. Null if the comment belongs to a different parent entity type. + pub project: Option>, + /// `Internal` The ID of the project that the comment is associated with. Null if the comment belongs to a different parent entity type. + pub project_id: Option, + /// `Internal` The initiative that the comment is associated with. Null if the comment belongs to a different parent entity type. + pub initiative: Option>, + /// `Internal` The ID of the initiative that the comment is associated with. Null if the comment belongs to a different parent entity type. + pub initiative_id: Option, + /// The parent comment under which the current comment is nested. Null for top-level comments that are not replies. pub parent: Option>, - /// The ID of the parent comment under which the current comment is nested. + /// The ID of the parent comment under which the current comment is nested. Null for top-level comments. pub parent_id: Option, - /// The user that resolved the thread. + /// The user that resolved the comment thread. Null if the thread has not been resolved or if this is not a top-level comment. pub resolving_user: Option>, - /// The time the resolvingUser resolved the thread. + /// The time when the comment thread was resolved. Null if the thread is unresolved. pub resolved_at: Option>, - /// The comment that resolved the thread. + /// The child comment that resolved this thread. Only set on top-level (parent) comments. Null if the thread is unresolved. pub resolving_comment: Option>, - /// The ID of the comment that resolved the thread. + /// The ID of the child comment that resolved this thread. Null if the thread is unresolved. pub resolving_comment_id: Option, - /// The user who wrote the comment. + /// The user who wrote the comment. Null for comments created by integrations or bots without a user association. pub user: Option>, - /// The external user who wrote the comment. + /// The external user who wrote the comment, when the comment was created through an integration such as Slack or Intercom. Null for comments created by workspace users. pub external_user: Option>, - /// The time user edited the comment. + /// The time the comment was last edited by its author. Null if the comment has not been edited since creation. pub edited_at: Option>, - /// `Internal` The comment content as a Prosemirror document. + /// `Internal` The comment content as a ProseMirror document. This is the canonical rich-text representation of the comment body. pub body_data: Option, - /// The text that this comment references. Only defined for inline comments. + /// The text that this comment references, used for inline comments on documents or issue descriptions. Null for standard comments that do not quote specific text. pub quoted_text: Option, - /// Emoji reaction summary, grouped by emoji type. + /// Emoji reaction summary for this comment, grouped by emoji type. Each entry contains the emoji name, count, and the IDs of users who reacted. pub reaction_data: Option, - /// `Internal` A generated summary of the comment thread. + /// `Internal` An AI-generated summary of the comment thread. Null if no summary has been generated or if this is not a top-level comment. pub thread_summary: Option, /// `Internal` Whether the comment is an artificial placeholder for an agent session thread created without a comment mention. pub is_artificial_agent_session_root: Option, /// Comment's URL. pub url: Option, /// The children of the comment. - pub children: Option>, + pub children: Option, /// Agent session associated with this comment. pub agent_session: Option>, /// `Internal` Agent sessions associated with this comment. - pub agent_sessions: Option>, + pub agent_sessions: Option, + /// `Internal` Agent sessions spawned from this comment. + pub spawned_agent_sessions: Option, + /// `Internal` AI prompt progresses associated with this comment. + pub ai_prompt_progresses: Option, /// Issues created from this comment. - pub created_issues: Option>, + pub created_issues: Option, /// The bot that created the comment. - pub bot_actor: Option>, + pub bot_actor: Option, /// `Internal` The user on whose behalf the comment was created, e.g. when the Linear assistant creates a comment for a user. pub on_behalf_of: Option>, /// The external thread that the comment is synced with. - pub external_thread: Option>, + pub external_thread: Option, /// `Internal` Whether the comment should be hidden from Linear clients. This is typically used for bot comments that provide redundant information (e.g., Slack Asks confirmation messages). pub hide_in_linear: Option, /// Reactions associated with the comment. - pub reactions: Option>>, + pub reactions: Option>, /// The external services the comment is synced with. - pub synced_with: Option>>, + pub synced_with: Option>, } impl GraphQLFields for Comment { type FullType = Self; fn selection() -> String { - "id createdAt updatedAt archivedAt body issueId documentContentId projectUpdateId initiativeUpdateId parentId resolvedAt resolvingCommentId editedAt bodyData quotedText reactionData threadSummary isArtificialAgentSessionRoot url hideInLinear" + "id createdAt updatedAt archivedAt body issueId documentContentId projectUpdateId initiativeUpdateId projectId initiativeId parentId resolvedAt resolvingCommentId editedAt bodyData quotedText reactionData threadSummary isArtificialAgentSessionRoot url hideInLinear" .into() } } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CommentConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for CommentConnection { type FullType = Self; @@ -1078,7 +2083,7 @@ impl GraphQLFields for CommentConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CommentEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -1088,13 +2093,14 @@ impl GraphQLFields for CommentEdge { "cursor".into() } } +/// The result of a comment mutation. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CommentPayload { /// The identifier of the last sync operation. pub last_sync_id: Option, /// The comment that was created or updated. - pub comment: Option>, + pub comment: Option, /// Whether the operation was successful. pub success: Option, } @@ -1104,6 +2110,7 @@ impl GraphQLFields for CommentPayload { "lastSyncId success".into() } } +/// Return type for contact mutations. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct ContactPayload { @@ -1116,6 +2123,7 @@ impl GraphQLFields for ContactPayload { "success".into() } } +/// The payload returned by the createCsvExportReport mutation. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CreateCsvExportReportPayload { @@ -1128,11 +2136,14 @@ impl GraphQLFields for CreateCsvExportReportPayload { "success".into() } } +/// `INTERNAL` Response from creating or joining a workspace. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CreateOrJoinOrganizationResponse { - pub organization: Option>, - pub user: Option>, + /// The workspace that was created or joined. + pub organization: Option, + /// The user who created or joined the workspace. + pub user: Option, } impl GraphQLFields for CreateOrJoinOrganizationResponse { type FullType = Self; @@ -1140,7 +2151,7 @@ impl GraphQLFields for CreateOrJoinOrganizationResponse { "".into() } } -/// A custom view that has been saved by a user. +/// A custom view built from a saved filter, sort, and grouping configuration. Views can be personal (visible only to the owner) or shared with the entire workspace. They define which issues, projects, initiatives, or feed items are displayed and how they are organized. Views can optionally be scoped to a team, project, or initiative. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomView { @@ -1153,56 +2164,56 @@ pub struct CustomView { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The name of the custom view. + /// The name of the custom view, displayed in the sidebar and navigation. pub name: Option, /// The description of the custom view. pub description: Option, - /// The icon of the custom view. + /// The icon of the custom view. Can be an emoji or a decorative icon identifier. pub icon: Option, - /// The color of the icon of the custom view. + /// The hex color code of the custom view icon. pub color: Option, - /// The organization of the custom view. + /// The workspace of the custom view. pub organization: Option>, - /// The user who created the custom view. + /// The user who originally created the custom view. pub creator: Option>, - /// The user who owns the custom view. + /// The user who owns the custom view. For personal views, only the owner can see and edit the view. pub owner: Option>, - /// The user who last updated the custom view. + /// The user who last updated the custom view. Null if the updater's account has been deleted. pub updated_by: Option>, - /// The filters applied to issues in the custom view. + /// The legacy serialized filters applied to issues in the custom view. pub filters: Option, - /// The filter applied to issues in the custom view. + /// The structured filter applied to issues in the custom view. Used when the view's modelName is "Issue". pub filter_data: Option, - /// The filter applied to projects in the custom view. + /// The filter applied to projects in the custom view. When set, this view displays projects instead of issues. pub project_filter_data: Option, - /// The filter applied to initiatives in the custom view. + /// The filter applied to initiatives in the custom view. When set, this view displays initiatives instead of issues. pub initiative_filter_data: Option, - /// The filter applied to feed items in the custom view. + /// The filter applied to feed items in the custom view. When set, this view displays feed items (updates) instead of issues. pub feed_item_filter_data: Option, - /// Whether the custom view is shared with everyone in the organization. + /// Whether the custom view is shared with everyone in the organization. Shared views appear in the workspace sidebar for all members. Personal (non-shared) views are only visible to their owner. pub shared: Option, - /// The custom view's unique URL slug. + /// The custom view's unique URL slug, used to construct human-readable URLs. Automatically generated on creation. pub slug_id: Option, - /// The model name of the custom view. + /// The entity type this view displays. Determined by which filter is set: "Project" if projectFilterData is set, "Initiative" if initiativeFilterData is set, "FeedItem" if feedItemFilterData is set, or "Issue" by default. pub model_name: Option, - /// `INTERNAL` The facet associated with the custom view. + /// `INTERNAL` The facet that links this custom view to its parent entity (project, initiative, team page, etc.). Null if the view is not attached to any parent via a facet. pub facet: Option>, - /// The team associated with the custom view. + /// The team that the custom view is scoped to. Null if the view is workspace-wide or scoped to a project/initiative instead. pub team: Option>, - /// Projects associated with the custom view. - pub projects: Option>, - /// Issues associated with the custom view. - pub issues: Option>, - /// Feed items associated with the custom view. - pub updates: Option>, - /// The current users view preferences for this custom view. - pub user_view_preferences: Option>, - /// The organizations default view preferences for this custom view. - pub organization_view_preferences: Option>, - /// The calculated view preferences values for this custom view. - pub view_preferences_values: Option>, - /// Initiatives associated with the custom view. - pub initiatives: Option>, + /// Projects matching the custom view's project filter. Returns an empty connection if the view's modelName is not "Project". + pub projects: Option, + /// Issues matching the custom view's issue filter. Returns an empty connection if the view's modelName is not "Issue". + pub issues: Option, + /// Feed items (updates) matching the custom view's feed item filter. Returns an empty connection if the view's modelName is not "FeedItem". + pub updates: Option, + /// The current user's personal view preferences for this custom view, if they have set any. + pub user_view_preferences: Option, + /// The workspace-level default view preferences for this custom view, if any have been set. + pub organization_view_preferences: Option, + /// The computed view preferences values for this custom view, merging organization defaults with user overrides and system defaults. Use this for the effective display settings rather than reading raw preferences directly. + pub view_preferences_values: Option, + /// Initiatives matching the custom view's initiative filter. Returns an empty connection if the view's modelName is not "Initiative". + pub initiatives: Option, } impl GraphQLFields for CustomView { type FullType = Self; @@ -1214,9 +2225,9 @@ impl GraphQLFields for CustomView { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomViewConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for CustomViewConnection { type FullType = Self; @@ -1227,7 +2238,7 @@ impl GraphQLFields for CustomViewConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomViewEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -1237,6 +2248,7 @@ impl GraphQLFields for CustomViewEdge { "cursor".into() } } +/// The result of a custom view subscribers check. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomViewHasSubscribersPayload { @@ -1249,7 +2261,7 @@ impl GraphQLFields for CustomViewHasSubscribersPayload { "hasSubscribers".into() } } -/// A custom view notification subscription. +/// A notification subscription scoped to a specific custom view. The subscriber receives notifications for events matching the custom view's filter criteria. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomViewNotificationSubscription { @@ -1262,31 +2274,31 @@ pub struct CustomViewNotificationSubscription { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The user that subscribed to receive notifications. - pub subscriber: Option>, - /// The customer associated with the notification subscription. - pub customer: Option>, + /// The user who will receive notifications from this subscription. + pub subscriber: Option, + /// The customer that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub customer: Option, /// The custom view subscribed to. - pub custom_view: Option>, - /// The contextual cycle view associated with the notification subscription. - pub cycle: Option>, - /// The contextual label view associated with the notification subscription. - pub label: Option>, - /// The contextual project view associated with the notification subscription. - pub project: Option>, - /// The contextual initiative view associated with the notification subscription. - pub initiative: Option>, - /// The team associated with the notification subscription. - pub team: Option>, - /// The user view associated with the notification subscription. - pub user: Option>, - /// The type of view to which the notification subscription context is associated with. + pub custom_view: Option, + /// The cycle that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub cycle: Option, + /// The issue label that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub label: Option, + /// The project that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub project: Option, + /// The initiative that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub initiative: Option, + /// The team that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub team: Option, + /// The user that this notification subscription is scoped to, for user-specific view subscriptions. Null if the subscription targets a different entity type. + pub user: Option, + /// The type of contextual view (e.g., active issues, backlog) that further scopes a team notification subscription. Null if the subscription is not associated with a specific view type. pub context_view_type: Option, - /// The type of user view to which the notification subscription context is associated with. + /// The type of user-specific view that further scopes a user notification subscription. Null if the subscription is not associated with a user view type. pub user_context_view_type: Option, - /// Whether the subscription is active or not. + /// Whether the subscription is active. When inactive, no notifications are generated from this subscription even though it still exists. pub active: Option, - /// The type of subscription. + /// The notification event types that this subscription will deliver to the subscriber. pub notification_subscription_types: Option>, } impl GraphQLFields for CustomViewNotificationSubscription { @@ -1296,13 +2308,14 @@ impl GraphQLFields for CustomViewNotificationSubscription { .into() } } +/// The result of a custom view mutation. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomViewPayload { /// The identifier of the last sync operation. pub last_sync_id: Option, /// The custom view that was created or updated. - pub custom_view: Option>, + pub custom_view: Option, /// Whether the operation was successful. pub success: Option, } @@ -1312,6 +2325,7 @@ impl GraphQLFields for CustomViewPayload { "lastSyncId success".into() } } +/// The result of a custom view suggestion query. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomViewSuggestionPayload { @@ -1328,7 +2342,7 @@ impl GraphQLFields for CustomViewSuggestionPayload { "name description icon".into() } } -/// A customer whose needs will be tied to issues or projects. +/// A customer organization tracked in Linear's customer management system. Customers represent external companies or organizations whose product requests and feedback are captured as customer needs, which can be linked to issues and projects. Customers can be associated with domains, external system IDs, Slack channels, and managed by integrations such as Intercom or Salesforce. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct Customer { @@ -1341,35 +2355,37 @@ pub struct Customer { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The customer's name. + /// The display name of the customer organization. pub name: Option, - /// The customer's logo URL. + /// URL of the customer's logo image. Null if no logo has been uploaded. pub logo_url: Option, - /// The domains associated with this customer. + /// The email domains associated with this customer (e.g., 'acme.com'). Used to automatically match incoming requests to this customer. Public email domains (e.g., gmail.com) are not allowed. Domains must be unique across all customers in the workspace. pub domains: Option>, - /// The ids of the customers in external systems. + /// Identifiers for this customer in external systems (e.g., CRM IDs from Intercom, Salesforce, or HubSpot). Used for matching customers during integration syncs and upsert operations. External IDs must be unique across customers in the workspace. pub external_ids: Option>, - /// The ID of the Slack channel used to interact with the customer. + /// The ID of the Slack channel linked to this customer for communication. Null if no Slack channel has been associated. Must be unique across all customers in the workspace. pub slack_channel_id: Option, - /// The user who owns the customer. + /// The workspace member assigned as the owner of this customer. Null if no owner has been assigned. App users cannot be set as customer owners. pub owner: Option>, - /// The current status of the customer. - pub status: Option>, - /// The annual revenue generated by the customer. + /// The current lifecycle status of the customer. Defaults to the first status by position when a customer is created without an explicit status. + pub status: Option, + /// The annual revenue generated by this customer. Null if revenue data has not been provided. May be synced from an external data source such as a CRM integration. pub revenue: Option, - /// The size of the customer. + /// The number of employees or seats at the customer organization. Null if size data has not been provided. May be synced from an external data source such as a CRM integration. pub size: Option, - /// The tier of the customer. - pub tier: Option>, - /// The approximate number of needs of the customer. + /// The tier or segment assigned to this customer for prioritization (e.g., Enterprise, Pro, Free). Null if no tier has been assigned. + pub tier: Option, + /// The approximate count of customer needs (requests) associated with this customer. This is a denormalized counter and may not reflect the exact count at all times. pub approximate_need_count: Option, - /// The customer's unique URL slug. + /// A unique, human-readable URL slug for the customer. Automatically generated and used in customer page URLs. pub slug_id: Option, - /// The ID of the main source, when a customer has multiple sources. Must be one of externalIds. + /// The primary external source ID when a customer has data from multiple external systems. Must be one of the values in the externalIds array. Null if the customer has zero or one external source. pub main_source_id: Option, - /// The integration that manages the Customer. + /// The list of customer needs (product requests and feedback) associated with this customer. + pub needs: Option>, + /// The integration that manages this customer's data (e.g., Intercom, Salesforce). Null if the customer is not managed by any data source integration. pub integration: Option>, - /// URL of the customer in Linear. + /// The URL of the customer's page in the Linear application. pub url: Option, } impl GraphQLFields for Customer { @@ -1382,9 +2398,9 @@ impl GraphQLFields for Customer { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for CustomerConnection { type FullType = Self; @@ -1395,7 +2411,7 @@ impl GraphQLFields for CustomerConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -1405,7 +2421,7 @@ impl GraphQLFields for CustomerEdge { "cursor".into() } } -/// A customer need, expressed through a reference to an issue, project, or comment. +/// A customer need represents a specific product request or piece of feedback from a customer. Customer needs serve as the bridge between customer feedback and engineering work by linking a customer to an issue or project, optionally with a comment or attachment providing additional context. Needs can be created manually, from integrations, or from intake sources like email. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerNeed { @@ -1418,29 +2434,29 @@ pub struct CustomerNeed { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The customer that this need is attached to. - pub customer: Option>, - /// The issue this need is referencing. - pub issue: Option>, - /// The project this need is referencing. - pub project: Option>, - /// The comment this need is referencing. - pub comment: Option>, - /// The attachment this need is referencing. - pub attachment: Option>, - /// The project attachment this need is referencing. - pub project_attachment: Option>, + /// The customer organization this need belongs to. Null if the need has not yet been associated with a customer. + pub customer: Option, + /// The issue this need is linked to. Either issueId or projectId must be set. When set, the need's projectId is denormalized from the issue's project. + pub issue: Option, + /// The project this need is linked to. For issue-based needs, this is denormalized from the issue's project. For project-only needs, this is set directly. + pub project: Option, + /// An optional comment providing additional context for this need. Null if the need was not created from or associated with a specific comment. + pub comment: Option, + /// The issue attachment linked to this need. Populated when the need originates from an intake source (e.g., Slack, Intercom) or when a URL is manually provided. Provides a link back to the original source of the customer feedback. Mutually exclusive with projectAttachment. + pub attachment: Option, + /// The project attachment linked to this need. Populated when the need originates from an intake source or when a URL is manually provided for a project-level need. Provides a link back to the original source of the customer feedback. Mutually exclusive with attachment. + pub project_attachment: Option, /// Whether the customer need is important or not. 0 = Not important, 1 = Important. pub priority: Option, - /// The need content in markdown format. + /// The body content of the need in Markdown format. Used to capture manual input about needs that cannot be directly tied to an attachment. Null if the need's content comes from an attached source. pub body: Option, - /// `Internal` The content of the need as a Prosemirror document. + /// `Internal` The body content of the need as a Prosemirror document JSON string. This is the structured representation of the body field, used for rich text rendering in the editor. pub body_data: Option, - /// The creator of the customer need. - pub creator: Option>, - /// The issue this customer need was originally created on. Will be undefined if the customer need hasn't been moved. - pub original_issue: Option>, - /// The URL of the underlying attachment, if any + /// The user who manually created this customer need. Null for needs created automatically by integrations or intake sources. + pub creator: Option, + /// The issue this customer need was originally created on, before being moved to a different issue or project. Null if the customer need has not been moved from its original location. + pub original_issue: Option, + /// The URL of the source attachment linked to this need, if any. Returns the URL from either the issue attachment or project attachment. Null if the need has no attached source. pub url: Option, } impl GraphQLFields for CustomerNeed { @@ -1458,7 +2474,7 @@ pub struct CustomerNeedArchivePayload { /// Whether the operation was successful. pub success: Option, /// The archived/unarchived entity. Null if entity was deleted. - pub entity: Option>, + pub entity: Option, } impl GraphQLFields for CustomerNeedArchivePayload { type FullType = Self; @@ -1469,9 +2485,9 @@ impl GraphQLFields for CustomerNeedArchivePayload { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerNeedConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for CustomerNeedConnection { type FullType = Self; @@ -1482,7 +2498,7 @@ impl GraphQLFields for CustomerNeedConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerNeedEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -1492,7 +2508,7 @@ impl GraphQLFields for CustomerNeedEdge { "cursor".into() } } -/// A customer need related notification. +/// A notification related to a customer need (request), such as creation, resolution, or being marked as important. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerNeedNotification { @@ -1505,22 +2521,21 @@ pub struct CustomerNeedNotification { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// Notification type. + /// Notification type. Determines the kind of event that triggered this notification and which associated entity fields will be populated. pub r#type: Option, - /// The user that caused the notification. - pub actor: Option>, - /// The external user that caused the notification. - pub external_user_actor: Option>, - /// The user that received the notification. - pub user: Option>, - /// The time at when the user marked the notification as read. Null, if the the user hasn't read the notification + /// The user that caused the notification. Null if the notification was triggered by a non-user actor such as an integration, external user, or system event. + pub actor: Option, + /// The external user that caused the notification. Populated when the notification was triggered by an external user (e.g., a commenter from a connected integration like Slack or GitHub) rather than a Linear workspace member. + pub external_user_actor: Option, + /// The recipient user of this notification. + pub user: Option, + /// The time at which the user marked the notification as read. Null if the notification is unread. pub read_at: Option>, - /// The time at when an email reminder for this notification was sent to the user. Null, if no email - /// reminder has been sent. + /// The time at which an email reminder for this notification was sent to the user. Null if no email reminder has been sent. pub emailed_at: Option>, - /// The time until a notification will be snoozed. After that it will appear in the inbox again. + /// The time until which a notification is snoozed. After this time, the notification reappears in the user's inbox. Null if the notification is not currently snoozed. pub snoozed_until_at: Option>, - /// The time at which a notification was unsnoozed.. + /// The time at which a notification was unsnoozed. Null if the notification has not been unsnoozed. pub unsnoozed_at: Option>, /// The category of the notification. pub category: Option, @@ -1551,15 +2566,15 @@ pub struct CustomerNeedNotification { /// `Internal` Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`. pub grouping_priority: Option, /// The bot that caused the notification. - pub bot_actor: Option>, + pub bot_actor: Option, /// Related customer need. pub customer_need_id: Option, /// The issue related to the notification. - pub related_issue: Option>, + pub related_issue: Option, /// The project related to the notification. - pub related_project: Option>, + pub related_project: Option, /// The customer need related to the notification. - pub customer_need: Option>, + pub customer_need: Option, } impl GraphQLFields for CustomerNeedNotification { type FullType = Self; @@ -1568,13 +2583,14 @@ impl GraphQLFields for CustomerNeedNotification { .into() } } +/// Return type for customer need mutations. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerNeedPayload { /// The identifier of the last sync operation. pub last_sync_id: Option, - /// The customer need that was created or updated. - pub need: Option>, + /// The customer need entity that was created or updated by the mutation. + pub need: Option, /// Whether the operation was successful. pub success: Option, } @@ -1584,17 +2600,18 @@ impl GraphQLFields for CustomerNeedPayload { "lastSyncId success".into() } } +/// Return type for customer need update mutations, including any related needs that were also updated. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerNeedUpdatePayload { /// The identifier of the last sync operation. pub last_sync_id: Option, - /// The customer need that was created or updated. - pub need: Option>, + /// The customer need entity that was created or updated by the mutation. + pub need: Option, /// Whether the operation was successful. pub success: Option, - /// The related customer needs that were updated. - pub updated_related_needs: Option>>, + /// Additional customer needs from the same customer on the same issue/project that were updated when applyPriorityToRelatedNeeds was set. + pub updated_related_needs: Option>, } impl GraphQLFields for CustomerNeedUpdatePayload { type FullType = Self; @@ -1602,7 +2619,7 @@ impl GraphQLFields for CustomerNeedUpdatePayload { "lastSyncId success".into() } } -/// A customer related notification. +/// A notification related to a customer, such as being added as the customer owner. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerNotification { @@ -1615,22 +2632,21 @@ pub struct CustomerNotification { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// Notification type. + /// Notification type. Determines the kind of event that triggered this notification and which associated entity fields will be populated. pub r#type: Option, - /// The user that caused the notification. - pub actor: Option>, - /// The external user that caused the notification. - pub external_user_actor: Option>, - /// The user that received the notification. - pub user: Option>, - /// The time at when the user marked the notification as read. Null, if the the user hasn't read the notification + /// The user that caused the notification. Null if the notification was triggered by a non-user actor such as an integration, external user, or system event. + pub actor: Option, + /// The external user that caused the notification. Populated when the notification was triggered by an external user (e.g., a commenter from a connected integration like Slack or GitHub) rather than a Linear workspace member. + pub external_user_actor: Option, + /// The recipient user of this notification. + pub user: Option, + /// The time at which the user marked the notification as read. Null if the notification is unread. pub read_at: Option>, - /// The time at when an email reminder for this notification was sent to the user. Null, if no email - /// reminder has been sent. + /// The time at which an email reminder for this notification was sent to the user. Null if no email reminder has been sent. pub emailed_at: Option>, - /// The time until a notification will be snoozed. After that it will appear in the inbox again. + /// The time until which a notification is snoozed. After this time, the notification reappears in the user's inbox. Null if the notification is not currently snoozed. pub snoozed_until_at: Option>, - /// The time at which a notification was unsnoozed.. + /// The time at which a notification was unsnoozed. Null if the notification has not been unsnoozed. pub unsnoozed_at: Option>, /// The category of the notification. pub category: Option, @@ -1661,11 +2677,11 @@ pub struct CustomerNotification { /// `Internal` Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`. pub grouping_priority: Option, /// The bot that caused the notification. - pub bot_actor: Option>, + pub bot_actor: Option, /// Related customer. pub customer_id: Option, /// The customer related to the notification. - pub customer: Option>, + pub customer: Option, } impl GraphQLFields for CustomerNotification { type FullType = Self; @@ -1674,7 +2690,7 @@ impl GraphQLFields for CustomerNotification { .into() } } -/// A customer notification subscription. +/// A notification subscription scoped to a specific customer. The subscriber receives notifications for events related to this customer, such as new customer needs or ownership changes. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerNotificationSubscription { @@ -1687,31 +2703,31 @@ pub struct CustomerNotificationSubscription { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The user that subscribed to receive notifications. - pub subscriber: Option>, + /// The user who will receive notifications from this subscription. + pub subscriber: Option, /// The customer subscribed to. - pub customer: Option>, - /// The contextual custom view associated with the notification subscription. - pub custom_view: Option>, - /// The contextual cycle view associated with the notification subscription. - pub cycle: Option>, - /// The contextual label view associated with the notification subscription. - pub label: Option>, - /// The contextual project view associated with the notification subscription. - pub project: Option>, - /// The contextual initiative view associated with the notification subscription. - pub initiative: Option>, - /// The team associated with the notification subscription. - pub team: Option>, - /// The user view associated with the notification subscription. - pub user: Option>, - /// The type of view to which the notification subscription context is associated with. + pub customer: Option, + /// The custom view that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub custom_view: Option, + /// The cycle that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub cycle: Option, + /// The issue label that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub label: Option, + /// The project that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub project: Option, + /// The initiative that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub initiative: Option, + /// The team that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub team: Option, + /// The user that this notification subscription is scoped to, for user-specific view subscriptions. Null if the subscription targets a different entity type. + pub user: Option, + /// The type of contextual view (e.g., active issues, backlog) that further scopes a team notification subscription. Null if the subscription is not associated with a specific view type. pub context_view_type: Option, - /// The type of user view to which the notification subscription context is associated with. + /// The type of user-specific view that further scopes a user notification subscription. Null if the subscription is not associated with a user view type. pub user_context_view_type: Option, - /// Whether the subscription is active or not. + /// Whether the subscription is active. When inactive, no notifications are generated from this subscription even though it still exists. pub active: Option, - /// The type of subscription. + /// The notification event types that this subscription will deliver to the subscriber. pub notification_subscription_types: Option>, } impl GraphQLFields for CustomerNotificationSubscription { @@ -1721,13 +2737,14 @@ impl GraphQLFields for CustomerNotificationSubscription { .into() } } +/// Return type for customer mutations. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerPayload { /// The identifier of the last sync operation. pub last_sync_id: Option, - /// The customer that was created or updated. - pub customer: Option>, + /// The customer entity that was created or updated by the mutation. + pub customer: Option, /// Whether the operation was successful. pub success: Option, } @@ -1737,7 +2754,7 @@ impl GraphQLFields for CustomerPayload { "lastSyncId success".into() } } -/// A customer status. +/// A workspace-defined lifecycle status for customers (e.g., Active, Churned, Trial). Customer statuses are ordered by position and displayed with a color in the UI. Every workspace has at least one status, and a default status is assigned to new customers when none is specified. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerStatus { @@ -1750,17 +2767,17 @@ pub struct CustomerStatus { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The name of the status. + /// The internal name of the status. Used as the default display name if no displayName is explicitly set. pub name: Option, - /// The UI color of the status as a HEX string. + /// The color of the status indicator in the UI, as a HEX string (e.g., '#ff0000'). pub color: Option, - /// Description of the status. + /// An optional description explaining what this status represents in the customer lifecycle. pub description: Option, - /// The position of the status in the workspace's customers flow. + /// The sort position of the status in the workspace's customer lifecycle flow. Lower values appear first. Collisions are automatically resolved by redistributing positions. pub position: Option, - /// The display name of the status. + /// The user-facing display name of the status shown in the UI. Defaults to the internal name if not explicitly set. pub display_name: Option, - /// The type of the customer status. + /// `Deprecated` The type of the customer status. Always returns null as statuses are no longer grouped by type. pub r#type: Option, } impl GraphQLFields for CustomerStatus { @@ -1772,9 +2789,9 @@ impl GraphQLFields for CustomerStatus { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerStatusConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for CustomerStatusConnection { type FullType = Self; @@ -1785,7 +2802,7 @@ impl GraphQLFields for CustomerStatusConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerStatusEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -1795,13 +2812,14 @@ impl GraphQLFields for CustomerStatusEdge { "cursor".into() } } +/// Return type for customer status mutations. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerStatusPayload { /// The identifier of the last sync operation. pub last_sync_id: Option, - /// The customer status that was created or updated. - pub status: Option>, + /// The customer status entity that was created or updated by the mutation. + pub status: Option, /// Whether the operation was successful. pub success: Option, } @@ -1811,7 +2829,7 @@ impl GraphQLFields for CustomerStatusPayload { "lastSyncId success".into() } } -/// A customer tier. +/// A workspace-defined tier or segment for categorizing customers (e.g., Enterprise, Pro, Free). Customer tiers are used for prioritization and filtering, are ordered by position, and displayed with a color in the UI. Tier names are unique within a workspace. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerTier { @@ -1824,15 +2842,15 @@ pub struct CustomerTier { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The name of the tier. + /// The internal name of the tier. Must be unique within the workspace. Used as the default display name if no displayName is explicitly set. pub name: Option, - /// The UI color of the tier as a HEX string. + /// The color of the tier indicator in the UI, as a HEX string (e.g., '#ff0000'). pub color: Option, - /// Description of the tier. + /// An optional description explaining what this tier represents and its intended use for customer segmentation. pub description: Option, - /// The position of the tier in the workspace's customers flow. + /// The sort position of the tier in the workspace's customer tier ordering. Lower values appear first. Collisions are automatically resolved by redistributing positions. pub position: Option, - /// The display name of the tier. + /// The user-facing display name of the tier shown in the UI. Defaults to the internal name if not explicitly set. pub display_name: Option, } impl GraphQLFields for CustomerTier { @@ -1844,9 +2862,9 @@ impl GraphQLFields for CustomerTier { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerTierConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for CustomerTierConnection { type FullType = Self; @@ -1857,7 +2875,7 @@ impl GraphQLFields for CustomerTierConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerTierEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -1867,13 +2885,14 @@ impl GraphQLFields for CustomerTierEdge { "cursor".into() } } +/// Return type for customer tier mutations. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CustomerTierPayload { /// The identifier of the last sync operation. pub last_sync_id: Option, - /// The customer tier that was created or updated. - pub tier: Option>, + /// The customer tier entity that was created or updated by the mutation. + pub tier: Option, /// Whether the operation was successful. pub success: Option, } @@ -1883,7 +2902,7 @@ impl GraphQLFields for CustomerTierPayload { "lastSyncId success".into() } } -/// A set of issues to be resolved in a specified amount of time. +/// A time-boxed iteration (similar to a sprint) used for planning and tracking work. Cycles belong to a team and have defined start and end dates. Issues are assigned to cycles for time-based planning, and progress is tracked via completed, in-progress, and total scope. Cycles are automatically completed when their end date passes, and uncompleted issues can be carried over to the next cycle. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct Cycle { @@ -1896,58 +2915,58 @@ pub struct Cycle { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The number of the cycle. + /// The auto-incrementing number of the cycle, unique within its team. This value is assigned automatically by the database and cannot be set on creation. pub number: Option, - /// The custom name of the cycle. + /// The custom name of the cycle. If not set, the cycle is displayed using its number (e.g., "Cycle 5"). pub name: Option, - /// The cycle's description. + /// The description of the cycle. pub description: Option, - /// The start time of the cycle. + /// The start date and time of the cycle. pub starts_at: Option>, - /// The end time of the cycle. + /// The end date and time of the cycle. When a cycle is completed prematurely, this is updated to match the completion time. When cycles are disabled, both endsAt and completedAt are set to the current time. pub ends_at: Option>, - /// The completion time of the cycle. If null, the cycle hasn't been completed. + /// The completion time of the cycle. If null, the cycle has not been completed yet. A cycle is completed either when its end date passes or when it is manually completed early. pub completed_at: Option>, - /// The time at which the cycle was automatically archived by the auto pruning process. + /// The time at which the cycle was automatically archived by the auto-pruning process. Null if the cycle has not been auto-archived. pub auto_archived_at: Option>, - /// The total number of issues in the cycle after each day. + /// The total number of issues in the cycle after each day. Each entry represents a snapshot at the end of that day, forming the basis for burndown charts. pub issue_count_history: Option>, - /// The number of completed issues in the cycle after each day. + /// The number of completed issues in the cycle after each day. Each entry corresponds to the same day index as issueCountHistory. pub completed_issue_count_history: Option>, - /// The total number of estimation points after each day. + /// The total number of estimation points (scope) in the cycle after each day. Used for scope-based burndown charts. pub scope_history: Option>, - /// The number of completed estimation points after each day. + /// The number of completed estimation points after each day. Used together with scopeHistory for burndown charts. pub completed_scope_history: Option>, - /// The number of in progress estimation points after each day. + /// The number of in-progress estimation points after each day. Tracks work that has been started but not yet completed. pub in_progress_scope_history: Option>, - /// The team that the cycle is associated with. + /// The team that the cycle belongs to. Each cycle is scoped to exactly one team. pub team: Option>, - /// `Internal` The progress history of the cycle. + /// `Internal` The detailed progress history of the cycle, including per-status breakdowns over time. pub progress_history: Option, - /// `Internal` The current progress of the cycle. + /// `Internal` The current progress snapshot of the cycle, broken down by issue status categories. pub current_progress: Option, - /// The cycle inherited from. + /// The parent cycle this cycle was inherited from. When a parent team creates cycles, sub-teams automatically receive corresponding inherited cycles. pub inherited_from: Option>, - /// Whether the cycle is currently active. + /// Whether the cycle is currently active. A cycle is active if the current time is between its start and end dates and it has not been completed. pub is_active: Option, - /// Whether the cycle is in the future. + /// Whether the cycle has not yet started. True if the cycle's start date is in the future. pub is_future: Option, - /// Whether the cycle is in the past. + /// Whether the cycle's end date has passed. pub is_past: Option, - /// Issues associated with the cycle. - pub issues: Option>, - /// Issues that weren't completed when the cycle was closed. - pub uncompleted_issues_upon_close: Option>, - /// The overall progress of the cycle. This is the (completed estimate points + 0.25 * in progress estimate points) / total estimate points. + /// Issues that are currently assigned to this cycle. + pub issues: Option, + /// Issues that were still open (not completed) when the cycle was closed. These issues may have been moved to the next cycle. + pub uncompleted_issues_upon_close: Option, + /// The overall progress of the cycle as a number between 0 and 1. Calculated as (completed estimate points + 0.25 * in-progress estimate points) / total estimate points. Returns 0 if no estimate points exist. pub progress: Option, - /// Whether the cycle is the next cycle for the team. + /// Whether this cycle is the next upcoming (not yet started) cycle for the team. pub is_next: Option, - /// Whether the cycle is the previous cycle for the team. + /// Whether this cycle is the most recently completed cycle for the team. pub is_previous: Option, /// `Internal` Documents associated with the cycle. - pub documents: Option>, + pub documents: Option, /// `Internal` Links associated with the cycle. - pub links: Option>, + pub links: Option, } impl GraphQLFields for Cycle { type FullType = Self; @@ -1965,7 +2984,7 @@ pub struct CycleArchivePayload { /// Whether the operation was successful. pub success: Option, /// The archived/unarchived entity. Null if entity was deleted. - pub entity: Option>, + pub entity: Option, } impl GraphQLFields for CycleArchivePayload { type FullType = Self; @@ -1976,9 +2995,9 @@ impl GraphQLFields for CycleArchivePayload { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CycleConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for CycleConnection { type FullType = Self; @@ -1989,7 +3008,7 @@ impl GraphQLFields for CycleConnection { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CycleEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -1999,7 +3018,7 @@ impl GraphQLFields for CycleEdge { "cursor".into() } } -/// A cycle notification subscription. +/// A notification subscription scoped to a specific cycle. The subscriber receives notifications for events related to issues in this cycle. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CycleNotificationSubscription { @@ -2012,31 +3031,31 @@ pub struct CycleNotificationSubscription { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The user that subscribed to receive notifications. - pub subscriber: Option>, - /// The customer associated with the notification subscription. - pub customer: Option>, - /// The contextual custom view associated with the notification subscription. - pub custom_view: Option>, + /// The user who will receive notifications from this subscription. + pub subscriber: Option, + /// The customer that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub customer: Option, + /// The custom view that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub custom_view: Option, /// The cycle subscribed to. - pub cycle: Option>, - /// The contextual label view associated with the notification subscription. - pub label: Option>, - /// The contextual project view associated with the notification subscription. - pub project: Option>, - /// The contextual initiative view associated with the notification subscription. - pub initiative: Option>, - /// The team associated with the notification subscription. - pub team: Option>, - /// The user view associated with the notification subscription. - pub user: Option>, - /// The type of view to which the notification subscription context is associated with. + pub cycle: Option, + /// The issue label that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub label: Option, + /// The project that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub project: Option, + /// The initiative that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub initiative: Option, + /// The team that this notification subscription is scoped to. Null if the subscription targets a different entity type. + pub team: Option, + /// The user that this notification subscription is scoped to, for user-specific view subscriptions. Null if the subscription targets a different entity type. + pub user: Option, + /// The type of contextual view (e.g., active issues, backlog) that further scopes a team notification subscription. Null if the subscription is not associated with a specific view type. pub context_view_type: Option, - /// The type of user view to which the notification subscription context is associated with. + /// The type of user-specific view that further scopes a user notification subscription. Null if the subscription is not associated with a user view type. pub user_context_view_type: Option, - /// Whether the subscription is active or not. + /// Whether the subscription is active. When inactive, no notifications are generated from this subscription even though it still exists. pub active: Option, - /// The type of subscription. + /// The notification event types that this subscription will deliver to the subscriber. pub notification_subscription_types: Option>, } impl GraphQLFields for CycleNotificationSubscription { @@ -2046,13 +3065,14 @@ impl GraphQLFields for CycleNotificationSubscription { .into() } } +/// The payload returned by cycle mutations. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct CyclePayload { /// The identifier of the last sync operation. pub last_sync_id: Option, - /// The Cycle that was created or updated. - pub cycle: Option>, + /// The cycle that was created or updated. + pub cycle: Option, /// Whether the operation was successful. pub success: Option, } @@ -2062,7 +3082,7 @@ impl GraphQLFields for CyclePayload { "lastSyncId success".into() } } -/// `Internal` A dashboard, usually a collection of widgets to display several insights at once. +/// `Internal` A configurable dashboard composed of widgets that display analytics, metrics, and insights. Dashboards can be personal or shared with the workspace, and optionally scoped to one or more teams. Each dashboard contains a set of widget configurations that define what data is visualized. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct Dashboard { @@ -2075,36 +3095,34 @@ pub struct Dashboard { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The dashboard's unique URL slug. + /// The dashboard's unique URL slug, used to construct human-readable URLs. Automatically generated on creation. pub slug_id: Option, /// The name of the dashboard. pub name: Option, /// The description of the dashboard. pub description: Option, - /// The icon of the dashboard. + /// The icon of the dashboard. Can be an emoji or a decorative icon identifier. pub icon: Option, - /// The color of the icon of the dashboard. + /// The hex color code of the dashboard icon. pub color: Option, - /// The sort order of the dashboard within the organization or its team. + /// The sort order of the dashboard within the workspace or its team. Lower values appear first. pub sort_order: Option, - /// Whether the dashboard is shared with everyone in the organization. + /// Whether the dashboard is shared with everyone in the workspace. Shared dashboards are visible to all members; unshared dashboards are only visible to the owner. pub shared: Option, - /// The organization of the dashboard. + /// The organization that the dashboard belongs to. pub organization: Option>, - /// The user who created the dashboard. + /// The user who created the dashboard. Null if the creator's account has been deleted. pub creator: Option>, - /// The user who last updated the dashboard. + /// The user who last updated the dashboard. Null if no user has updated it or the updater's account has been deleted. pub updated_by: Option>, - /// The owner of the dashboard. + /// The owner of the dashboard. For personal dashboards, only the owner can view them. Null if the owner's account has been deleted. pub owner: Option>, - /// The filter applied to all dashboard widgets showing issues data. + /// A global issue filter applied to all dashboard widgets that display issue data. Individual widgets may apply additional filters on top of this. pub issue_filter: Option, - /// The filter applied to all dashboard widgets showing projects data. + /// A global project filter applied to all dashboard widgets that display project data. Individual widgets may apply additional filters on top of this. pub project_filter: Option, - /// The widgets on the dashboard. + /// The widget configuration for the dashboard, defining the layout grid of rows and the widgets within each row, including their type, size, and data settings. pub widgets: Option, - /// The team associated with the dashboard. - pub team: Option>, } impl GraphQLFields for Dashboard { type FullType = Self; @@ -2130,7 +3148,7 @@ impl GraphQLFields for DeletePayload { "lastSyncId success entityId".into() } } -/// A document that can be attached to different entities. +/// A rich-text document that lives within a project, initiative, team, issue, release, or cycle. Documents support collaborative editing via ProseMirror/Yjs and store their content in a separate DocumentContent entity. Each document is associated with exactly one parent entity. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct Document { @@ -2143,43 +3161,45 @@ pub struct Document { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The document title. + /// The title of the document. An empty string indicates an untitled document. pub title: Option, - /// The icon of the document. + /// `Internal` A one-sentence AI-generated summary of the document content. Null if no summary has been generated. + pub summary: Option, + /// The icon of the document, either a decorative icon type or an emoji string. Null if no icon has been set. pub icon: Option, - /// The color of the icon. + /// The hex color of the document icon. Null if no custom color has been set. pub color: Option, - /// The user who created the document. + /// The user who created the document. Null if the creator's account has been deleted. pub creator: Option>, - /// The user who last updated the document. + /// The user who last updated the document. Null if the user's account has been deleted. pub updated_by: Option>, - /// The project that the document is associated with. + /// The project that the document is associated with. Null if the document belongs to a different parent entity type. pub project: Option>, - /// The initiative that the document is associated with. + /// The initiative that the document is associated with. Null if the document belongs to a different parent entity type. pub initiative: Option>, - /// `Internal` The team that the document is associated with. + /// `Internal` The team that the document is associated with. Null if the document belongs to a different parent entity type. pub team: Option>, - /// The issue that the document is associated with. + /// The issue that the document is associated with. Null if the document belongs to a different parent entity type. pub issue: Option>, - /// `Internal` The release that the document is associated with. + /// `Internal` The release that the document is associated with. Null if the document belongs to a different parent entity type. pub release: Option>, - /// `Internal` The cycle that the document is associated with. + /// `Internal` The cycle that the document is associated with. Null if the document belongs to a different parent entity type. pub cycle: Option>, - /// The document's unique URL slug. + /// The document's unique URL slug, used to construct human-readable URLs. pub slug_id: Option, - /// The last template that was applied to this document. + /// The last template that was applied to this document. Null if no template has been applied. pub last_applied_template: Option>, - /// The time at which the document was hidden. Null if the entity has not been hidden. + /// The time at which the document was hidden from the default view. Null if the document has not been hidden. pub hidden_at: Option>, - /// A flag that indicates whether the document is in the trash bin. + /// A flag that indicates whether the document is in the trash bin. Trashed documents are archived and can be restored. pub trashed: Option, - /// The order of the item in the resources list. + /// The sort order of the document in its parent entity's resources list. This order is shared with other resource types such as external links. pub sort_order: Option, /// Comments associated with the document. - pub comments: Option>, - /// The documents content in markdown format. + pub comments: Option, + /// The document's content in markdown format. pub content: Option, - /// `Internal` The documents content as YJS state. + /// `Internal` The document's content as a base64-encoded Yjs state update. pub content_state: Option, /// The ID of the document content associated with the document. pub document_content_id: Option, @@ -2189,7 +3209,7 @@ pub struct Document { impl GraphQLFields for Document { type FullType = Self; fn selection() -> String { - "id createdAt updatedAt archivedAt title icon color slugId hiddenAt trashed sortOrder content contentState documentContentId url" + "id createdAt updatedAt archivedAt title summary icon color slugId hiddenAt trashed sortOrder content contentState documentContentId url" .into() } } @@ -2202,7 +3222,7 @@ pub struct DocumentArchivePayload { /// Whether the operation was successful. pub success: Option, /// The archived/unarchived entity. Null if entity was deleted. - pub entity: Option>, + pub entity: Option, } impl GraphQLFields for DocumentArchivePayload { type FullType = Self; @@ -2213,9 +3233,9 @@ impl GraphQLFields for DocumentArchivePayload { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct DocumentConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, } impl GraphQLFields for DocumentConnection { type FullType = Self; @@ -2223,7 +3243,7 @@ impl GraphQLFields for DocumentConnection { "".into() } } -/// A document content for a project. +/// The rich-text content body of a document, issue, project, initiative, project milestone, pull request, release note, AI prompt rules, or welcome message. Content is stored as a base64-encoded Yjs state and can be converted to Markdown or ProseMirror JSON. Each DocumentContent belongs to exactly one parent entity and supports real-time collaborative editing. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct DocumentContent { @@ -2236,32 +3256,28 @@ pub struct DocumentContent { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The document content in markdown format. + /// The document content in markdown format. This is a derived representation of the canonical Yjs content state. pub content: Option, - /// The document content state as a base64 encoded string. + /// The document content state as a base64-encoded Yjs state update. This is the canonical representation of the document content used for collaborative editing. pub content_state: Option, - /// The issue that the content is associated with. + /// The issue that the content is associated with. Null if the content belongs to a different parent entity type. pub issue: Option>, - /// `Internal` The pull request that the content is associated with. + /// `Internal` The pull request that the content is associated with. Null if the content belongs to a different parent entity type. pub pull_request: Option>, - /// The project that the content is associated with. + /// The project that the content is associated with. Null if the content belongs to a different parent entity type. pub project: Option>, - /// The initiative that the content is associated with. + /// The initiative that the content is associated with. Null if the content belongs to a different parent entity type. pub initiative: Option>, - /// The project milestone that the content is associated with. + /// The project milestone that the content is associated with. Null if the content belongs to a different parent entity type. pub project_milestone: Option>, - /// The document that the content is associated with. + /// The document that the content is associated with. Null if the content belongs to a different parent entity type. pub document: Option>, - /// The AI prompt rules that the content is associated with. + /// The AI prompt rules that the content is associated with. Null if the content belongs to a different parent entity type. pub ai_prompt_rules: Option>, - /// The welcome message that the content is associated with. + /// The welcome message that the content is associated with. Null if the content belongs to a different parent entity type. pub welcome_message: Option>, - /// The time at which the document content was restored from a previous version. + /// The time at which the document content was restored from a previous version in the content history. Null if the content has never been restored. pub restored_at: Option>, - /// Comments associated with the document content. - pub comments: Option>, - /// `ALPHA` The histories of the document content. - pub history: Option>, } impl GraphQLFields for DocumentContent { type FullType = Self; @@ -2269,10 +3285,10 @@ impl GraphQLFields for DocumentContent { "id createdAt updatedAt archivedAt content contentState restoredAt".into() } } -/// A document content history for a document. +/// A draft revision of document content, pending user review. Each user can have at most one draft per document content. Drafts are seeded from the live document state and stored as base64-encoded Yjs state updates, allowing independent editing without affecting the published document until the user explicitly applies their changes. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] -pub struct DocumentContentHistory { +pub struct DocumentContentDraft { /// The unique identifier of the entity. pub id: Option, /// The time at which the entity was created. @@ -2282,52 +3298,28 @@ pub struct DocumentContentHistory { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The document content that this history item is associated with. - pub document_content: Option>, - /// `Internal` The document content as a Prosemirror document. - pub content_data: Option, - /// IDs of actors whose edits went into this history item. - pub actor_ids: Option>, - /// The timestamp associated with the DocumentContent when it was originally saved. - pub content_data_snapshot_at: Option>, -} -impl GraphQLFields for DocumentContentHistory { - type FullType = Self; - fn selection() -> String { - "id createdAt updatedAt archivedAt contentData actorIds contentDataSnapshotAt".into() - } -} -#[derive(Debug, Clone, Default, Serialize, Deserialize)] -#[serde(rename_all = "camelCase", default)] -pub struct DocumentContentHistoryConnection { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, -} -impl GraphQLFields for DocumentContentHistoryConnection { - type FullType = Self; - fn selection() -> String { - "".into() - } -} -#[derive(Debug, Clone, Default, Serialize, Deserialize)] -#[serde(rename_all = "camelCase", default)] -pub struct DocumentContentHistoryEdge { - pub node: Option>, - /// Used in `before` and `after` args - pub cursor: Option, + /// The document content that this draft is a revision of. + pub document_content: Option, + /// The identifier of the document content that this draft is a revision of. + pub document_content_id: Option, + /// The draft content state as a base64-encoded Yjs state update. This represents the user's in-progress edits that have not yet been applied to the live document. + pub content_state: Option, + /// The user who created or owns this draft. + pub user: Option, + /// The identifier of the user who owns this draft. + pub user_id: Option, } -impl GraphQLFields for DocumentContentHistoryEdge { +impl GraphQLFields for DocumentContentDraft { type FullType = Self; fn selection() -> String { - "cursor".into() + "id createdAt updatedAt archivedAt documentContentId contentState userId".into() } } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct DocumentContentHistoryPayload { /// The document content history entries. - pub history: Option>>, + pub history: Option>, /// Whether the operation was successful. pub success: Option, } @@ -2340,27 +3332,29 @@ impl GraphQLFields for DocumentContentHistoryPayload { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct DocumentContentHistoryType { - /// The UUID of the document content history entry. + /// The unique identifier of the document content history entry. pub id: Option, - /// The date when the document content history entry was created. + /// The date when this document content history entry record was created. pub created_at: Option>, - /// The date when the document content history snapshot was taken. This can be different than createdAt since the content is captured from its state at the previously known updatedAt timestamp in the case of an update. On document create, these timestamps can be the same. + /// The timestamp of the document content state when this snapshot was captured. This can differ from createdAt because the content is captured from its state at the previously known updatedAt timestamp in the case of an update. On document creation, these timestamps can be identical. pub content_data_snapshot_at: Option>, - /// `Internal` The document content as Prosemirror document. + /// `Internal` The document content as a ProseMirror document at the time this history entry was captured. pub content_data: Option, - /// The ID of the author of the change. + /// IDs of users whose edits are included in this history entry. pub actor_ids: Option>, + /// Metadata associated with the history entry, including content diffs and AI-generated change summaries. + pub metadata: Option, } impl GraphQLFields for DocumentContentHistoryType { type FullType = Self; fn selection() -> String { - "id createdAt contentDataSnapshotAt contentData actorIds".into() + "id createdAt contentDataSnapshotAt contentData actorIds metadata".into() } } #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct DocumentEdge { - pub node: Option>, + pub node: Option, /// Used in `before` and `after` args pub cursor: Option, } @@ -2370,7 +3364,7 @@ impl GraphQLFields for DocumentEdge { "cursor".into() } } -/// A document related notification. +/// A notification related to a document, such as comments, mentions, content changes, or document lifecycle events. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct DocumentNotification { @@ -2389,22 +3383,21 @@ pub struct DocumentNotification { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// Notification type. + /// Notification type. Determines the kind of event that triggered this notification and which associated entity fields will be populated. pub r#type: Option, - /// The user that caused the notification. - pub actor: Option>, - /// The external user that caused the notification. - pub external_user_actor: Option>, - /// The user that received the notification. - pub user: Option>, - /// The time at when the user marked the notification as read. Null, if the the user hasn't read the notification + /// The user that caused the notification. Null if the notification was triggered by a non-user actor such as an integration, external user, or system event. + pub actor: Option, + /// The external user that caused the notification. Populated when the notification was triggered by an external user (e.g., a commenter from a connected integration like Slack or GitHub) rather than a Linear workspace member. + pub external_user_actor: Option, + /// The recipient user of this notification. + pub user: Option, + /// The time at which the user marked the notification as read. Null if the notification is unread. pub read_at: Option>, - /// The time at when an email reminder for this notification was sent to the user. Null, if no email - /// reminder has been sent. + /// The time at which an email reminder for this notification was sent to the user. Null if no email reminder has been sent. pub emailed_at: Option>, - /// The time until a notification will be snoozed. After that it will appear in the inbox again. + /// The time until which a notification is snoozed. After this time, the notification reappears in the user's inbox. Null if the notification is not currently snoozed. pub snoozed_until_at: Option>, - /// The time at which a notification was unsnoozed.. + /// The time at which a notification was unsnoozed. Null if the notification has not been unsnoozed. pub unsnoozed_at: Option>, /// The category of the notification. pub category: Option, @@ -2435,7 +3428,7 @@ pub struct DocumentNotification { /// `Internal` Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`. pub grouping_priority: Option, /// The bot that caused the notification. - pub bot_actor: Option>, + pub bot_actor: Option, /// Related document ID. pub document_id: Option, } @@ -2446,13 +3439,14 @@ impl GraphQLFields for DocumentNotification { .into() } } +/// The result of a document mutation. #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct DocumentPayload { /// The identifier of the last sync operation. pub last_sync_id: Option, /// The document that was created or updated. - pub document: Option>, + pub document: Option, /// Whether the operation was successful. pub success: Option, } @@ -2465,12 +3459,12 @@ impl GraphQLFields for DocumentPayload { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase", default)] pub struct DocumentSearchPayload { - pub edges: Option>>, - pub nodes: Option>>, - pub page_info: Option>, - /// Archived entities matching the search term along with all their dependencies. - pub archive_payload: Option>, - /// Total number of results for query without filters applied. + pub edges: Option>, + pub nodes: Option>, + pub page_info: Option, + /// Archived entities matching the search term along with all their dependencies, serialized for the client sync engine. + pub archive_payload: Option, + /// Total number of matching results before pagination is applied. pub total_count: Option, } impl GraphQLFields for DocumentSearchPayload { @@ -2491,43 +3485,45 @@ pub struct DocumentSearchResult { pub updated_at: Option>, /// The time at which the entity was archived. Null if the entity has not been archived. pub archived_at: Option>, - /// The document title. + /// The title of the document. An empty string indicates an untitled document. pub title: Option, - /// The icon of the document. + /// `Internal` A one-sentence AI-generated summary of the document content. Null if no summary has been generated. + pub summary: Option, + /// The icon of the document, either a decorative icon type or an emoji string. Null if no icon has been set. pub icon: Option, - /// The color of the icon. + /// The hex color of the document icon. Null if no custom color has been set. pub color: Option, - /// The user who created the document. - pub creator: Option>, - /// The user who last updated the document. - pub updated_by: Option>, - /// The project that the document is associated with. - pub project: Option>, - /// The initiative that the document is associated with. - pub initiative: Option>, - /// `Internal` The team that the document is associated with. - pub team: Option>, - /// The issue that the document is associated with. - pub issue: Option>, - /// `Internal` The release that the document is associated with. - pub release: Option>, - /// `Internal` The cycle that the document is associated with. - pub cycle: Option>, - /// The document's unique URL slug. + /// The user who created the document. Null if the creator's account has been deleted. + pub creator: Option, + /// The user who last updated the document. Null if the user's account has been deleted. + pub updated_by: Option, + /// The project that the document is associated with. Null if the document belongs to a different parent entity type. + pub project: Option, + /// The initiative that the document is associated with. Null if the document belongs to a different parent entity type. + pub initiative: Option, + /// `Internal` The team that the document is associated with. Null if the document belongs to a different parent entity type. + pub team: Option, + /// The issue that the document is associated with. Null if the document belongs to a different parent entity type. + pub issue: Option, + /// `Internal` The release that the document is associated with. Null if the document belongs to a different parent entity type. + pub release: Option, + /// `Internal` The cycle that the document is associated with. Null if the document belongs to a different parent entity type. + pub cycle: Option, + /// The document's unique URL slug, used to construct human-readable URLs. pub slug_id: Option, - /// The last template that was applied to this document. - pub last_applied_template: Option>, - /// The time at which the document was hidden. Null if the entity has not been hidden. + /// The last template that was applied to this document. Null if no template has been applied. + pub last_applied_template: Option