pub enum Destination {
GitHub {
owner: String,
repo: String,
},
Jira {
site: String,
project: String,
},
Linear {
team: String,
},
Zendesk {
subdomain: String,
},
Freshdesk {
domain: String,
},
Intercom,
Salesforce {
instance: String,
},
HubSpot,
Slack {
channel: String,
},
Webhook {
url: String,
},
Colonizer {
repo: String,
},
}Expand description
Where a ticket is filed. One variant per supported tracker, because the
eleven do not share a shape: a GitHub destination is an owner and repo, a
webhook is a URL, and Intercom and HubSpot address nothing but the
credential — the workspace/portal the token belongs to is the
destination, so those variants carry no fields at all.
The fields name where to file, not who may file: an owner, a repo, a
site, a channel are routing facts a venture may reasonably hold, log and
persist. Most variants therefore hold no secret — Webhook is the
exception, because its URL routinely carries a bearer token in its path
or query — so the hand-written Debug
renders a webhook URL as [redacted], following the
Recipient precedent: core’s log redaction keys off
the field name (is_secret_field) and
cannot see inside a {:?} of this enum.
Serialize/Deserialize stay, because a destination has to be
persisted and read back — it is tenant configuration (the credential
proper is Credential, which refuses both) — and Serialize
deliberately does not redact, because round-tripping tenant
configuration has to work. The consequence: a serialised
Destination::Webhook is the credential — store it where secrets
go, never in a log, an event payload, or an error body.
Variants§
GitHub
A repository on GitHub (or GitHub Enterprise).
Fields
Jira
A project on a Jira site.
Fields
Linear
A team on Linear.
Zendesk
A Zendesk subdomain.
Freshdesk
A Freshdesk portal.
Intercom
Intercom. The workspace is identified by the credential.
Salesforce
A Salesforce instance.
HubSpot
HubSpot. The portal is identified by the credential.
Slack
A Slack channel.
Webhook
A generic webhook. The URL is credential material: it is the
bearer capability that lets anyone holding it file tickets, so it is
redacted in Debug and adapters must treat it like a token.
Colonizer
A repository on the Colonizer automation. The repository is a routing
fact, not a secret — it names where tickets land — so it prints in
Debug, exactly as a GitHub repository does.
Implementations§
Trait Implementations§
Source§impl Clone for Destination
impl Clone for Destination
Source§impl Debug for Destination
Prints the variant and its non-secret fields, never a webhook URL — a
webhook endpoint is a bearer capability, and the token it carries in its
path or query must not survive into a log line.
impl Debug for Destination
Prints the variant and its non-secret fields, never a webhook URL — a webhook endpoint is a bearer capability, and the token it carries in its path or query must not survive into a log line.
Source§impl<'de> Deserialize<'de> for Destination
impl<'de> Deserialize<'de> for Destination
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for Destination
Source§impl Hash for Destination
impl Hash for Destination
Source§impl PartialEq for Destination
impl PartialEq for Destination
Source§impl Serialize for Destination
impl Serialize for Destination
impl StructuralPartialEq for Destination
Auto Trait Implementations§
impl Freeze for Destination
impl RefUnwindSafe for Destination
impl Send for Destination
impl Sync for Destination
impl Unpin for Destination
impl UnsafeUnpin for Destination
impl UnwindSafe for Destination
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.