vss_client_ng/headers/
mod.rs1use async_trait::async_trait;
2use std::collections::HashMap;
3use std::error::Error;
4use std::fmt::Display;
5use std::fmt::Formatter;
6
7#[cfg(feature = "lnurl-auth")]
8mod lnurl_auth_jwt;
9
10#[cfg(feature = "lnurl-auth")]
11pub use lnurl_auth_jwt::LnurlAuthToJwtProvider;
12
13#[cfg(feature = "sigs-auth")]
14pub mod sigs_auth;
15
16#[async_trait]
18pub trait VssHeaderProvider: Send + Sync {
19 async fn get_headers(
25 &self, request: &[u8],
26 ) -> Result<HashMap<String, String>, VssHeaderProviderError>;
27}
28
29#[derive(Debug)]
31pub enum VssHeaderProviderError {
32 InvalidData {
34 error: String,
36 },
37 RequestError {
39 error: String,
41 },
42 AuthorizationError {
44 error: String,
46 },
47 InternalError {
49 error: String,
51 },
52}
53
54impl Display for VssHeaderProviderError {
55 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
56 match self {
57 Self::InvalidData { error } => {
58 write!(f, "invalid data: {}", error)
59 },
60 Self::RequestError { error } => {
61 write!(f, "error performing external request: {}", error)
62 },
63 Self::AuthorizationError { error } => {
64 write!(f, "authorization was refused: {}", error)
65 },
66 Self::InternalError { error } => {
67 write!(f, "internal error: {}", error)
68 },
69 }
70 }
71}
72
73impl Error for VssHeaderProviderError {}
74
75pub struct FixedHeaders {
77 headers: HashMap<String, String>,
78}
79
80impl FixedHeaders {
81 pub fn new(headers: HashMap<String, String>) -> FixedHeaders {
83 FixedHeaders { headers }
84 }
85}
86
87#[async_trait]
88impl VssHeaderProvider for FixedHeaders {
89 async fn get_headers(
90 &self, _request: &[u8],
91 ) -> Result<HashMap<String, String>, VssHeaderProviderError> {
92 Ok(self.headers.clone())
93 }
94}