     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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96

    use header::{EntityTag, ETAG};

    header! {
        /// `ETag` header, defined in [RFC7232](http://tools.ietf.org/html/rfc7232#section-2.3)
        ///
        /// The `ETag` header field in a response provides the current entity-tag
        /// for the selected representation, as determined at the conclusion of
        /// handling the request.  An entity-tag is an opaque validator for
        /// differentiating between multiple representations of the same
        /// resource, regardless of whether those multiple representations are
        /// due to resource state changes over time, content negotiation
        /// resulting in multiple representations being valid at the same time,
        /// or both.  An entity-tag consists of an opaque quoted string, possibly
        /// prefixed by a weakness indicator.
        ///
        /// # ABNF
        ///
        /// ```text
        /// ETag       = entity-tag
        /// ```
        ///
        /// # Example values
        ///
        /// * `"xyzzy"`
        /// * `W/"xyzzy"`
        /// * `""`
        ///
        /// # Examples
        ///
        /// ```rust
        /// use actix_web::HttpResponse;
        /// use actix_web::http::header::{ETag, EntityTag};
        ///
        /// let mut builder = HttpResponse::Ok();
        /// builder.set(ETag(EntityTag::new(false, "xyzzy".to_owned())));
        /// ```
        ///
        /// ```rust
        /// use actix_web::HttpResponse;
        /// use actix_web::http::header::{ETag, EntityTag};
        ///
        /// let mut builder = HttpResponse::Ok();
        /// builder.set(ETag(EntityTag::new(true, "xyzzy".to_owned())));
        /// ```
        (ETag, ETAG) => [EntityTag]

        test_etag {
            // From the RFC
            test_header!(test1,
                vec![b"\"xyzzy\""],
                Some(ETag(EntityTag::new(false, "xyzzy".to_owned()))));
            test_header!(test2,
                vec![b"W/\"xyzzy\""],
                Some(ETag(EntityTag::new(true, "xyzzy".to_owned()))));
            test_header!(test3,
                vec![b"\"\""],
                Some(ETag(EntityTag::new(false, "".to_owned()))));
            // Own tests
            test_header!(test4,
                vec![b"\"foobar\""],
                Some(ETag(EntityTag::new(false, "foobar".to_owned()))));
            test_header!(test5,
                vec![b"\"\""],
                Some(ETag(EntityTag::new(false, "".to_owned()))));
            test_header!(test6,
                vec![b"W/\"weak-etag\""],
                Some(ETag(EntityTag::new(true, "weak-etag".to_owned()))));
            test_header!(test7,
                vec![b"W/\"\x65\x62\""],
                Some(ETag(EntityTag::new(true, "\u{0065}\u{0062}".to_owned()))));
            test_header!(test8,
                vec![b"W/\"\""],
                Some(ETag(EntityTag::new(true, "".to_owned()))));
            test_header!(test9,
                vec![b"no-dquotes"],
                None::<ETag>);
            test_header!(test10,
                vec![b"w/\"the-first-w-is-case-sensitive\""],
                None::<ETag>);
            test_header!(test11,
                vec![b""],
                None::<ETag>);
            test_header!(test12,
                vec![b"\"unmatched-dquotes1"],
                None::<ETag>);
            test_header!(test13,
                vec![b"unmatched-dquotes2\""],
                None::<ETag>);
            test_header!(test14,
                vec![b"matched-\"dquotes\""],
                None::<ETag>);
            test_header!(test15,
                vec![b"\""],
                None::<ETag>);
        }
    }

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g. `str,u8` or `String,struct:Vec,test`)