11// Copyright 2023-, Edge & Node, GraphOps, and Semiotic Labs.
22// SPDX-License-Identifier: Apache-2.0
33
4- use std:: ops:: Deref ;
5-
64use axum_extra:: headers:: { self , Header , HeaderName , HeaderValue } ;
75use lazy_static:: lazy_static;
86use prometheus:: { register_counter, Counter } ;
97use tap_core:: receipt:: SignedReceipt ;
108
119#[ derive( Debug , PartialEq ) ]
12- pub struct TapReceipt ( Option < SignedReceipt > ) ;
13-
14- impl TapReceipt {
15- pub fn into_signed_receipt ( self ) -> Option < SignedReceipt > {
16- self . 0
17- }
18- }
19-
20- impl Deref for TapReceipt {
21- type Target = Option < SignedReceipt > ;
22-
23- fn deref ( & self ) -> & Self :: Target {
24- & self . 0
25- }
26- }
10+ pub struct TapReceipt ( pub SignedReceipt ) ;
2711
2812lazy_static ! {
2913 static ref TAP_RECEIPT : HeaderName = HeaderName :: from_static( "tap-receipt" ) ;
@@ -42,14 +26,12 @@ impl Header for TapReceipt {
4226 {
4327 let mut execute = || {
4428 let value = values. next ( ) ;
45- let raw_receipt = value
46- . map ( |value| value. to_str ( ) )
47- . transpose ( )
48- . map_err ( |_| headers:: Error :: invalid ( ) ) ?;
49- let parsed_receipt = raw_receipt
50- . map ( serde_json:: from_str)
51- . transpose ( )
29+ let raw_receipt = value. ok_or ( headers:: Error :: invalid ( ) ) ?;
30+ let raw_receipt = raw_receipt
31+ . to_str ( )
5232 . map_err ( |_| headers:: Error :: invalid ( ) ) ?;
33+ let parsed_receipt =
34+ serde_json:: from_str ( raw_receipt) . map_err ( |_| headers:: Error :: invalid ( ) ) ?;
5335 Ok ( TapReceipt ( parsed_receipt) )
5436 } ;
5537 execute ( ) . inspect_err ( |_| TAP_RECEIPT_INVALID . inc ( ) )
@@ -86,7 +68,7 @@ mod test {
8668 let decoded_receipt = TapReceipt :: decode ( & mut header_values. into_iter ( ) )
8769 . expect ( "tap receipt header value should be valid" ) ;
8870
89- assert_eq ! ( decoded_receipt, TapReceipt ( Some ( original_receipt. clone ( ) ) ) ) ;
71+ assert_eq ! ( decoded_receipt, TapReceipt ( original_receipt) ) ;
9072 }
9173
9274 #[ test]
0 commit comments