Skip to main content

JiraClient

Struct JiraClient 

Source
pub struct JiraClient { /* private fields */ }

Implementations§

Source§

impl JiraClient

Source

pub fn new( url: impl Into<String>, project_key: impl Into<String>, email: impl Into<String>, token: SecretString, ) -> Self

Create a new Jira client. Flavor is auto-detected from the URL.

Source

pub fn with_proxy(self, headers: HashMap<String, String>) -> Self

Configure proxy mode with extra headers added to every request. When proxy is active, the provider’s own auth headers are suppressed — the proxy handles authentication. Note: instance_url is preserved for generating browse links.

Source

pub fn with_instance_url(self, url: impl Into<String>) -> Self

Override the instance URL used for generating browse links. Useful when proxy URL differs from real Jira instance URL.

Source

pub fn with_flavor(self, flavor: JiraFlavor) -> Self

Override auto-detected flavor. Use when the URL doesn’t reflect the actual Jira deployment (e.g. proxy URL instead of real Jira URL).

Source

pub fn with_base_url( base_url: impl Into<String>, project_key: impl Into<String>, email: impl Into<String>, token: SecretString, flavor: bool, ) -> Self

Create a new Jira client with explicit base URL (for testing with httpmock). The base URL is used as-is (no /rest/api/N suffix appended).

Source

pub async fn list_structures_for_metadata( &self, ) -> Result<Vec<JiraStructureRef>>

Fetch a compact list of accessible Structures for metadata enrichment.

Unlike Self::get_structures, this is intended to be called from a metadata-assembly pipeline and swallows the “Structure plugin not installed” error (HTTP 404, which the Structure endpoint returns as a generic Jira “dead link” HTML page) into an empty Vec. The resulting Ok(vec![]) is the “no structures are available here” signal that downstream enrichers key on to decide whether to touch the structureId parameter of Structure tools.

Credential / permission failures (401 Unauthorized, 403 Forbidden) still propagate — those indicate the caller’s integration is misconfigured, not that the feature is absent, and the metadata build should surface the error rather than silently pretend no structures exist.

Source

pub async fn fetch_fields(&self) -> Result<Vec<JiraField>>

Fetch every field (system + custom) on the Jira instance. Single round-trip — Jira returns all fields in one unpaginated response. Caller is responsible for caching if it plans to call repeatedly; for name → id lookups, prefer resolve_field_id_by_name which caches internally.

Source

pub async fn resolve_field_id_by_name( &self, name: &str, ) -> Result<Option<String>>

Resolve a Jira field name (e.g. "Epic Link", "Sprint", "Epic Name") to its id (e.g. "customfield_10014").

Returns Ok(None) when no field with this exact name exists on the instance — most often because the field is disabled, renamed, or localised. Callers that depend on a specific field should treat None as a hard error and surface a hint pointing users at get_custom_fields for discovery.

The first lookup populates an in-memory cache (field_cache) from GET /rest/api/{v}/field; subsequent lookups are allocation-free and don’t hit the network. Concurrent first-time lookups race-free thanks to tokio::sync::OnceCell.

Source

pub async fn load_default_metadata( &self, strategy: MetadataLoadStrategy, ) -> Result<JiraMetadata>

Build a crate::metadata::JiraMetadata cache the schema enricher can consume, with project selection driven by the caller-supplied crate::metadata::MetadataLoadStrategy.

This is the supported entry point for downstream consumers that don’t already have metadata loaded — they pick a strategy, this method handles project discovery, per-project metadata fetches, and MAX_ENRICHMENT_PROJECTS enforcement. Strategies are intentionally explicit (no auto-default) so callers think about which N projects make sense for their surface area.

Strategy-driven entry point. Concrete strategies land behind a match here; unwired variants still return ProviderUnsupported so downstream callers can probe safely.

Source

pub async fn build_project_metadata( &self, project_key: &str, ) -> Result<JiraProjectMetadata>

Fetch and assemble crate::metadata::JiraProjectMetadata for a single project — issue types, components, priorities, link types, customfields. Building block reused by every concrete MetadataLoadStrategy.

Issuance breakdown (5 round-trips per project, sequential):

  • GET /project/{key} for issueTypes
  • GET /project/{key}/components
  • GET /priority (instance-wide; same payload for every project but small)
  • GET /issueLinkType (instance-wide)
  • GET /field (instance-wide)

None of the instance-wide calls are memoised today — looping over N projects issues 3·N redundant round-trips for /priority//issueLinkType//field. Acceptable for the MAX_ENRICHMENT_PROJECTS = 30 budget; a follow-up may wrap the instance-wide responses in a tokio::sync::OnceCell alongside field_cache if profiling justifies it.

Trait Implementations§

Source§

impl IssueProvider for JiraClient

Source§

fn get_issues<'life0, 'async_trait>( &'life0 self, filter: IssueFilter, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Issue>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get a list of issues with optional filters.
Source§

fn get_issue<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Issue>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get a single issue by key (e.g., “gitlab#123”, “gh#456”).
Source§

fn create_issue<'life0, 'async_trait>( &'life0 self, input: CreateIssueInput, ) -> Pin<Box<dyn Future<Output = Result<Issue>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Create a new issue.
Source§

fn update_issue<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 str, input: UpdateIssueInput, ) -> Pin<Box<dyn Future<Output = Result<Issue>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Update an existing issue.
Source§

fn get_comments<'life0, 'life1, 'async_trait>( &'life0 self, issue_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Comment>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn add_comment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, issue_key: &'life1 str, body: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Comment>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn get_statuses<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<IssueStatus>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get available statuses for the issue tracker. Default returns ProviderUnsupported — override in providers that support statuses.
Source§

fn get_users<'life0, 'async_trait>( &'life0 self, options: GetUsersOptions, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<User>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get users from the issue tracker (Jira only).
Link two issues together.
Source§

fn get_issue_relations<'life0, 'life1, 'async_trait>( &'life0 self, issue_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<IssueRelations>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get issue relations (parent, subtasks, linked issues).
Source§

fn upload_attachment<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, issue_key: &'life1 str, filename: &'life2 str, data: &'life3 [u8], ) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Upload a file attachment to an issue. Returns the download URL. Default returns ProviderUnsupported — override in providers that support attachments.
Source§

fn get_issue_attachments<'life0, 'life1, 'async_trait>( &'life0 self, issue_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<AssetMeta>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

List attachments currently attached to an issue (body + comments). Read more
Source§

fn download_attachment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _issue_key: &'life1 str, asset_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Download the raw bytes of an attachment belonging to an issue. Read more
Source§

fn delete_attachment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _issue_key: &'life1 str, asset_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Delete an attachment from an issue. Read more
Source§

fn asset_capabilities(&self) -> AssetCapabilities

Describe which asset operations this provider supports for each context. Used by the enricher to surface per-provider capabilities in tool schemas so agents can adapt their behaviour before making calls that would fail with ProviderUnsupported.
Source§

fn get_structures<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Structure>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List all available structures.
Source§

fn get_structure_forest<'life0, 'async_trait>( &'life0 self, structure_id: u64, options: GetForestOptions, ) -> Pin<Box<dyn Future<Output = Result<StructureForest>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get a structure’s forest (hierarchy tree).
Source§

fn add_structure_rows<'life0, 'async_trait>( &'life0 self, structure_id: u64, input: AddStructureRowsInput, ) -> Pin<Box<dyn Future<Output = Result<ForestModifyResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Add rows to a structure’s forest.
Source§

fn move_structure_rows<'life0, 'async_trait>( &'life0 self, structure_id: u64, input: MoveStructureRowsInput, ) -> Pin<Box<dyn Future<Output = Result<ForestModifyResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Move rows within a structure’s forest.
Source§

fn remove_structure_row<'life0, 'async_trait>( &'life0 self, structure_id: u64, row_id: u64, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Remove a row from a structure’s forest.
Source§

fn get_structure_values<'life0, 'async_trait>( &'life0 self, input: GetStructureValuesInput, ) -> Pin<Box<dyn Future<Output = Result<StructureValues>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Batch-read column values (including formulas) for structure rows.
Source§

fn get_structure_views<'life0, 'async_trait>( &'life0 self, structure_id: u64, view_id: Option<u64>, ) -> Pin<Box<dyn Future<Output = Result<Vec<StructureView>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get views for a structure, optionally a specific view by ID.
Source§

fn save_structure_view<'life0, 'async_trait>( &'life0 self, input: SaveStructureViewInput, ) -> Pin<Box<dyn Future<Output = Result<StructureView>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Create or update a structure view.
Source§

fn create_structure<'life0, 'async_trait>( &'life0 self, input: CreateStructureInput, ) -> Pin<Box<dyn Future<Output = Result<Structure>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Create a new structure.
Source§

fn get_structure_generators<'life0, 'async_trait>( &'life0 self, structure_id: u64, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<StructureGenerator>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List generators configured on a structure.
Source§

fn add_structure_generator<'life0, 'async_trait>( &'life0 self, input: AddStructureGeneratorInput, ) -> Pin<Box<dyn Future<Output = Result<StructureGenerator>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Attach a new generator to a structure.
Source§

fn sync_structure_generator<'life0, 'async_trait>( &'life0 self, input: SyncStructureGeneratorInput, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Force a generator to refresh its produced rows.
Source§

fn delete_structure<'life0, 'async_trait>( &'life0 self, structure_id: u64, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Delete a structure permanently.
Source§

fn update_structure_automation<'life0, 'async_trait>( &'life0 self, input: UpdateStructureAutomationInput, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Replace a structure’s automation configuration.
Source§

fn trigger_structure_automation<'life0, 'async_trait>( &'life0 self, structure_id: u64, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Run a structure’s automation pass on demand.
Source§

fn get_board_sprints<'life0, 'async_trait>( &'life0 self, board_id: u64, state: SprintState, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Sprint>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List sprints visible on a board, optionally filtered by state.
Source§

fn assign_to_sprint<'life0, 'async_trait>( &'life0 self, input: AssignToSprintInput, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Move one or more issues onto a sprint.
Source§

fn list_project_versions<'life0, 'async_trait>( &'life0 self, params: ListProjectVersionsParams, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<ProjectVersion>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List versions (“releases” / fixVersion targets) for a project. Default: ProviderUnsupported.
Source§

fn upsert_project_version<'life0, 'async_trait>( &'life0 self, input: UpsertProjectVersionInput, ) -> Pin<Box<dyn Future<Output = Result<ProjectVersion>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Create-or-update a project version, keyed by (project, name). Partial update: optional fields left as None are not touched. Default: ProviderUnsupported.
Source§

fn list_custom_fields<'life0, 'async_trait>( &'life0 self, params: ListCustomFieldsParams, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<CustomFieldDescriptor>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List provider-side custom fields. Lets agents (and downstream codegen) discover the customfield_* ids of an instance without hardcoding them. Default impl returns ProviderUnsupported — providers without a real customfield concept (GitHub, GitLab) keep that default.
Source§

fn provider_name(&self) -> &'static str

Get the provider name for logging (e.g., “gitlab”, “github”).
Remove a link between two issues.
Source§

fn set_custom_fields<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _issue_key: &'life1 str, _fields: &'life2 [Value], ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Set custom fields on an issue. Each entry: {"id": "field_id", "value": <value>}. Default is no-op — override in providers that support custom fields (e.g., ClickUp).
Source§

impl MergeRequestProvider for JiraClient

Source§

fn provider_name(&self) -> &'static str

Get the provider name for logging.
Source§

fn get_merge_requests<'life0, 'async_trait>( &'life0 self, _filter: MrFilter, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<MergeRequest>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Get a list of merge requests with optional filters.
Source§

fn get_merge_request<'life0, 'life1, 'async_trait>( &'life0 self, _key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<MergeRequest, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Get a single merge request by key (e.g., “mr#123”, “pr#456”).
Source§

fn get_discussions<'life0, 'life1, 'async_trait>( &'life0 self, _mr_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Discussion>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Get discussions/comments for a merge request.
Source§

fn get_diffs<'life0, 'life1, 'async_trait>( &'life0 self, _mr_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<FileDiff>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Source§

fn add_comment<'life0, 'life1, 'async_trait>( &'life0 self, _mr_key: &'life1 str, _input: CreateCommentInput, ) -> Pin<Box<dyn Future<Output = Result<Comment, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Source§

fn create_merge_request<'life0, 'async_trait>( &'life0 self, _input: CreateMergeRequestInput, ) -> Pin<Box<dyn Future<Output = Result<MergeRequest, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Create a new merge request / pull request.
Source§

fn update_merge_request<'life0, 'life1, 'async_trait>( &'life0 self, _key: &'life1 str, _input: UpdateMergeRequestInput, ) -> Pin<Box<dyn Future<Output = Result<MergeRequest, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Update an existing merge request / pull request.
Source§

fn get_releases<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Release>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Get releases/tags for the repository.
Source§

fn get_mr_attachments<'life0, 'life1, 'async_trait>( &'life0 self, _mr_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<AssetMeta>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

List attachments on a merge request (body + discussions).
Source§

fn download_mr_attachment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _mr_key: &'life1 str, _asset_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Source§

fn delete_mr_attachment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _mr_key: &'life1 str, _asset_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Source§

impl PipelineProvider for JiraClient

Source§

fn provider_name(&self) -> &'static str

Get the provider name for logging.
Source§

fn get_pipeline<'life0, 'async_trait>( &'life0 self, _input: GetPipelineInput, ) -> Pin<Box<dyn Future<Output = Result<PipelineInfo, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Source§

fn get_job_logs<'life0, 'life1, 'async_trait>( &'life0 self, _job_id: &'life1 str, _options: JobLogOptions, ) -> Pin<Box<dyn Future<Output = Result<JobLogOutput, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Get job logs with search, pagination, or smart extraction.
Source§

impl Provider for JiraClient

Source§

fn get_current_user<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<User>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the current authenticated user.
Source§

impl UserProvider for JiraClient

Source§

fn provider_name(&self) -> &'static str

Provider name for logging / error reporting.
Source§

fn get_user_profile<'life0, 'life1, 'async_trait>( &'life0 self, user_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<User>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Resolve a user by their provider-native id (Slack U0123, Jira accountId / name, ClickUp user id, etc.).
Source§

fn lookup_user_by_email<'life0, 'life1, 'async_trait>( &'life0 self, email: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<User>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Look up a user by email. Returns None if the provider can issue the query but there is no match, Error::ProviderUnsupported when the provider simply doesn’t expose an email lookup.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more