@@ -35,13 +35,27 @@ impl<'a> Name<'a> {
3535 self . full
3636 }
3737
38+ fn without_suffix ( & self ) -> Option < & str > {
39+ let domain_len = self . full . len ( ) ;
40+ let suffix_len = self . suffix ( ) . len ( ) ;
41+ if domain_len == suffix_len {
42+ return None ;
43+ }
44+ self . full . get ( ..domain_len - suffix_len - 1 )
45+ }
46+
3847 /// The root domain (the registrable part)
3948 pub fn root ( & self ) -> Option < & str > {
40- let offset = self . prefix ( ) ?. rfind ( '.' ) . map ( |x| x + 1 ) . unwrap_or_default ( ) ;
49+ let offset = self
50+ . without_suffix ( ) ?
51+ . rfind ( '.' )
52+ . map ( |x| x + 1 )
53+ . unwrap_or_default ( ) ;
4154 self . full . get ( offset..)
4255 }
4356
44- pub fn sub_domain ( & self ) -> Option < & str > {
57+ /// The part before the root domain (aka. subdomain)
58+ pub fn prefix ( & self ) -> Option < & str > {
4559 let domain_len = self . full . len ( ) ;
4660 let root_len = self . root ( ) ?. len ( ) ;
4761 if domain_len == root_len {
@@ -50,15 +64,6 @@ impl<'a> Name<'a> {
5064 self . full . get ( ..domain_len - root_len - 1 )
5165 }
5266
53- fn prefix ( & self ) -> Option < & str > {
54- let domain_len = self . full . len ( ) ;
55- let suffix_len = self . suffix ( ) . len ( ) ;
56- if domain_len == suffix_len {
57- return None ;
58- }
59- self . full . get ( ..domain_len - suffix_len - 1 )
60- }
61-
6267 /// The domain name suffix (extension)
6368 pub fn suffix ( & self ) -> & str {
6469 let offset = self . full . len ( ) - self . suffix . as_bytes ( ) . len ( ) ;
0 commit comments