1
- use dep::std::collections::bounded_vec::BoundedVec ;
2
1
use crate:: {
3
2
Sequence , MAX_EMAIL_ADDRESS_LENGTH , EMAIL_ADDRESS_CHAR_TABLE ,
4
- headers:: constrain_header_field_detect_last_angle_bracket
3
+ headers:: constrain_header_field_detect_last_angle_bracket ,
5
4
};
6
5
7
6
pub fn get_email_address <let MAX_HEADER_LENGTH : u32 , let HEADER_FIELD_NAME_LENGTH : u32 >(
8
7
header : BoundedVec <u8 , MAX_HEADER_LENGTH >,
9
8
header_field_sequence : Sequence ,
10
9
email_address_sequence : Sequence ,
11
- header_field_name : [u8 ; HEADER_FIELD_NAME_LENGTH ]
10
+ header_field_name : [u8 ; HEADER_FIELD_NAME_LENGTH ],
12
11
) -> BoundedVec <u8 , MAX_EMAIL_ADDRESS_LENGTH > {
13
12
// check field is uninterrupted and matches the expected field name
14
- let last_angle_bracket = constrain_header_field_detect_last_angle_bracket ::<MAX_HEADER_LENGTH , MAX_EMAIL_ADDRESS_LENGTH + HEADER_FIELD_NAME_LENGTH + 1 , HEADER_FIELD_NAME_LENGTH >(header , header_field_sequence , header_field_name );
13
+ let last_angle_bracket = constrain_header_field_detect_last_angle_bracket ::<MAX_HEADER_LENGTH , MAX_EMAIL_ADDRESS_LENGTH + HEADER_FIELD_NAME_LENGTH + 1 , HEADER_FIELD_NAME_LENGTH >(
14
+ header ,
15
+ header_field_sequence ,
16
+ header_field_name ,
17
+ );
15
18
// if angle bracket found, assert index is +1
16
19
if last_angle_bracket != 0 {
17
20
assert (
18
- email_address_sequence .index == last_angle_bracket + 1 , "Email address must start immediately after '<' if bracket is present"
21
+ email_address_sequence .index == last_angle_bracket + 1 ,
22
+ "Email address must start immediately after '<' if bracket is present" ,
19
23
);
20
24
}
21
25
// check email sequence is within header field
22
26
assert (
23
27
email_address_sequence .index >= header_field_sequence .index
24
- & email_address_sequence .end_index () <= header_field_sequence .end_index (), "Email address sequence out of bounds"
28
+ & email_address_sequence .end_index () <= header_field_sequence .end_index (),
29
+ "Email address sequence out of bounds" ,
25
30
);
26
31
27
32
// constrained get email address
@@ -30,18 +35,22 @@ pub fn get_email_address<let MAX_HEADER_LENGTH: u32, let HEADER_FIELD_NAME_LENGT
30
35
31
36
pub fn parse_email_address <let MAX_HEADER_LENGTH : u32 >(
32
37
header : BoundedVec <u8 , MAX_HEADER_LENGTH >,
33
- email_address_sequence : Sequence
38
+ email_address_sequence : Sequence ,
34
39
) -> BoundedVec <u8 , MAX_EMAIL_ADDRESS_LENGTH > {
35
40
// check the sequence is proceeded by an acceptable character
36
41
if email_address_sequence .index != 0 {
37
42
assert (
38
- EMAIL_ADDRESS_CHAR_TABLE [header .get_unchecked (email_address_sequence .index - 1 )] == 2 , "Email address must start with an acceptable character"
43
+ EMAIL_ADDRESS_CHAR_TABLE [header .get_unchecked (email_address_sequence .index - 1 )] == 2 ,
44
+ "Email address must start with an acceptable character" ,
39
45
);
40
46
}
41
47
if email_address_sequence .end_index () < header .len () {
42
48
assert (
43
- EMAIL_ADDRESS_CHAR_TABLE [header .get_unchecked (email_address_sequence .index + email_address_sequence .length )]
44
- == 3 , "Email address must end with an acceptable character"
49
+ EMAIL_ADDRESS_CHAR_TABLE [header .get_unchecked (
50
+ email_address_sequence .index + email_address_sequence .length ,
51
+ )]
52
+ == 3 ,
53
+ "Email address must end with an acceptable character" ,
45
54
);
46
55
}
47
56
// check the email address and assign
@@ -50,15 +59,15 @@ pub fn parse_email_address<let MAX_HEADER_LENGTH: u32>(
50
59
let index = email_address_sequence .index + i ;
51
60
if index < email_address_sequence .end_index () {
52
61
let letter = header .get_unchecked (index );
53
- email_address .storage [ i ] = letter ;
62
+ email_address .set_unchecked ( i , letter ) ;
54
63
assert (
55
- EMAIL_ADDRESS_CHAR_TABLE [letter ] == 1 , "Email address must only contain acceptable characters"
64
+ EMAIL_ADDRESS_CHAR_TABLE [letter ] == 1 ,
65
+ "Email address must only contain acceptable characters" ,
56
66
);
57
67
}
58
68
}
59
69
email_address .len = email_address_sequence .length ;
60
70
// todo: should probably introduce a check for @
61
-
62
71
email_address
63
72
}
64
73
0 commit comments