1use sip_types::msg::{RequestLine, StatusLine};
2use sip_types::Headers;
3use std::error::Error;
4use std::fmt::Debug;
5
6mod digest;
7
8pub use digest::{DigestAuthenticator, DigestCredentials, DigestError, DigestUser};
9
10pub trait ClientAuthenticator {
12    type Error: Error + Debug;
13
14    fn authorize_request(&mut self, request: &mut Headers);
18
19    fn handle_rejection(
23        &mut self,
24        rejected_request: RequestParts<'_>,
25        reject_response: ResponseParts<'_>,
26    ) -> Result<(), Self::Error>;
27}
28
29#[derive(Debug, Clone, Copy)]
31pub struct RequestParts<'s> {
32    pub line: &'s RequestLine,
33    pub headers: &'s Headers,
34    pub body: &'s [u8],
35}
36
37pub struct ResponseParts<'s> {
39    pub line: &'s StatusLine,
40    pub headers: &'s Headers,
41    pub body: &'s [u8],
42}