masterror 0.27.3

Application error types and response mapping
Documentation
// SPDX-FileCopyrightText: 2025 RAprogramm <andrey.rozanov.vl@gmail.com>
//
// SPDX-License-Identifier: MIT

use masterror::Error;

#[derive(Debug)]
struct Limits {
    lo: i32,
    hi: i32,
}

#[derive(Debug, Error)]
#[error(
    "range {lo}-{hi} suggestion {suggestion}",
    lo = .limits.lo,
    hi = .limits.hi,
    suggestion = .suggestion.as_ref().map_or_else(|| "<none>", |s| s.as_str())
)]
struct StructProjection {
    limits: Limits,
    suggestion: Option<String>,
}

#[derive(Debug)]
struct Payload {
    data: &'static str,
}

#[derive(Debug, Error)]
enum EnumProjection {
    #[error("tuple data {data}", data = .0.data)]
    Tuple(Payload),
    #[error(
        "named suggestion {value}",
        value = .suggestion.as_ref().map_or_else(|| "<none>", |s| s.as_str())
    )]
    Named { suggestion: Option<String> },
}

fn main() {
    let _ = StructProjection {
        limits: Limits { lo: 0, hi: 3 },
        suggestion: Some(String::from("hint")),
    };
    let _ = EnumProjection::Tuple(Payload { data: "payload" });
}