1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//! Token validation observation hooks.
use crateMaybeSendSync;
/// The outcome of a token validation attempt.
///
/// Passed to the [`OnValidate`] callback registered on a validator. Which
/// variants can occur depends on the validator — e.g. `CallError` arises only
/// from introspection, never from the self-contained RFC 9068 path.
/// A callback invoked after each token validation attempt.
///
/// Implement this trait (or use a closure) to observe validation outcomes — for
/// example to record metrics, emit structured log events, or trigger alerts.
///
/// Any context needed to identify the validator (resource name, machine ID, etc.)
/// should be captured by the implementation itself.
///
/// # Example
///
/// ```rust,no_run
/// # use std::sync::Arc;
/// # use huskarl_resource_server::validator::observe::{OnValidate, ValidationOutcome};
/// let resource = "my-api";
/// let observer: Arc<dyn OnValidate> = Arc::new(move |outcome: ValidationOutcome| {
/// metrics::counter!(
/// "my.token.validate",
/// "resource" => resource,
/// "outcome" => outcome.as_str(),
/// ).increment(1);
/// });
/// ```