pub struct Error { /* private fields */ }
Expand description

An error encountered during attribute parsing.

Given that most errors darling encounters represent code bugs in dependent crates, the internal structure of the error is deliberately opaque.

Implementations

Error creation functions

Creates a new error with a custom message.

Creates a new error for a field that appears twice in the input.

Creates a new error for a field that appears twice in the input. Helper to avoid repeating the syn::Path to String conversion.

Creates a new error for a non-optional field that does not appear in the input.

Creates a new error for a field name that appears in the input but does not correspond to a known field.

Creates a new error for a field name that appears in the input but does not correspond to a known field. Helper to avoid repeating the syn::Path to String conversion.

Creates a new error for a field name that appears in the input but does not correspond to a known attribute. The second argument is the list of known attributes; if a similar name is found that will be shown in the emitted error message.

Creates a new error for a struct or variant that does not adhere to the supported shape.

Creates a new error for a field which has an unexpected literal type.

Creates a new error for a field which has an unexpected literal type. This will automatically extract the literal type name from the passed-in Lit and set the span to encompass only the literal value.

Usage

This is most frequently used in overrides of the FromMeta::from_value method.


use darling::{FromMeta, Error, Result};
use syn::{Lit, LitStr};

pub struct Foo(String);

impl FromMeta for Foo {
    fn from_value(value: &Lit) -> Result<Self> {
        if let Lit::Str(ref lit_str) = *value {
            Ok(Foo(lit_str.value()))
        } else {
            Err(Error::unexpected_lit_type(value))
        }
    }
}

Creates a new error for a value which doesn’t match a set of expected literals.

Creates a new error for a list which did not get enough items to proceed.

Creates a new error when a list got more items than it supports. The max argument is the largest number of items the receiver could accept.

Bundle a set of multiple errors into a single Error instance.

Panics

This function will panic if errors.is_empty() == true.

Error instance methods

Check if this error is associated with a span in the token stream.

Tie a span to the error if none is already present. This is used in darling::FromMeta and other traits to attach errors to the most specific possible location in the input source code.

All darling-built impls, either from the crate or from the proc macro, will call this when appropriate during parsing, so it should not be necessary to call this unless you have overridden:

  • FromMeta::from_meta
  • FromMeta::from_nested_meta
  • FromMeta::from_value

Recursively converts a tree of errors to a flattened list.

Adds a location to the error, such as a field or variant. Locations must be added in reverse order of specificity.

Adds a location to the error, such as a field or variant. Locations must be added in reverse order of specificity. This is a helper function to avoid repeating path to string logic.

Gets the number of individual errors in this error.

This function never returns 0, as it’s impossible to construct a multi-error from an empty Vec.

Write this error and any children as compile errors into a TokenStream to be returned by the proc-macro.

The behavior of this method will be slightly different if the diagnostics feature is enabled: In that case, the diagnostics will be emitted immediately by this call, and an empty TokenStream will be returned.

Return these tokens unmodified to avoid disturbing the attached span information.

Usage
// in your proc-macro function
let opts = match MyOptions::from_derive_input(&ast) {
    Ok(val) => val,
    Err(err) => {
        return err.write_errors();
    }
}

Trait Implementations

Formats the value using the given formatter. Read more

Formats the value using the given formatter. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

Converts the given value to a String. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.