actix_web_extract/
lib.rs

1use actix_web::{
2    error::ParseError,
3    http::{header, header::Header},
4};
5use std::{
6    fmt,
7    future::{ready, Ready},
8};
9
10#[derive(Debug)]
11pub struct FirstAcceptLanguage(header::AcceptLanguage);
12
13impl fmt::Display for FirstAcceptLanguage {
14    fn fmt(&self, f: &mut fmt::Formatter) -> std::fmt::Result {
15        for lang in self.0.as_slice() {
16            return write!(f, "{}", lang.to_string());
17        }
18        write!(f, "{}", "")
19    }
20}
21
22impl actix_web::FromRequest for FirstAcceptLanguage {
23    type Error = ParseError;
24    type Future = Ready<Result<Self, Self::Error>>;
25
26    #[inline]
27    fn from_request(req: &actix_web::HttpRequest, _: &mut actix_web::dev::Payload) -> Self::Future {
28        match Header::parse(req) {
29            Ok(header) => ready(Ok(FirstAcceptLanguage(header))),
30            Err(e) => ready(Err(e)),
31        }
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    #[test]
38    fn it_works() {
39        let result = 2 + 2;
40        assert_eq!(result, 4);
41    }
42}