4242//! */
4343//! let mut tree = PathTree::new();
4444//!
45- //! tree.insert("/", 0)
46- //! .insert("/login", 1)
47- //! .insert("/signup", 2)
48- //! .insert("/settings", 3)
49- //! .insert("/settings/:page", 4)
50- //! .insert("/:user", 5)
51- //! .insert("/:user/:repo", 6)
52- //! .insert("/public/:any*", 7)
53- //! .insert("/:org/:repo/releases/download/:tag/:filename.:ext", 8)
54- //! .insert("/:org/:repo/tags/:day-:month-:year", 9)
55- //! .insert("/:org/:repo/actions/:name\\::verb", 10)
56- //! .insert("/:org/:repo/:page", 11)
57- //! .insert("/:org/:repo/*", 12)
58- //! .insert("/api/+", 13);
45+ //! tree.insert("/", 0);
46+ //! tree .insert("/login", 1);
47+ //! tree .insert("/signup", 2);
48+ //! tree .insert("/settings", 3);
49+ //! tree .insert("/settings/:page", 4);
50+ //! tree .insert("/:user", 5);
51+ //! tree .insert("/:user/:repo", 6);
52+ //! tree .insert("/public/:any*", 7);
53+ //! tree .insert("/:org/:repo/releases/download/:tag/:filename.:ext", 8);
54+ //! tree .insert("/:org/:repo/tags/:day-:month-:year", 9);
55+ //! tree .insert("/:org/:repo/actions/:name\\::verb", 10);
56+ //! tree .insert("/:org/:repo/:page", 11);
57+ //! tree .insert("/:org/:repo/*", 12);
58+ //! tree .insert("/api/+", 13);
5959//!
6060//! let r = tree.find("/").unwrap();
6161//! assert_eq!(r.value, &0);
@@ -166,9 +166,9 @@ impl<'a, T> PathTree<'a, T> {
166166 }
167167 }
168168
169- pub fn insert ( & mut self , path : & ' a str , value : T ) -> & mut Self {
169+ pub fn insert ( & mut self , path : & ' a str , value : T ) -> usize {
170170 if path. is_empty ( ) {
171- return self ;
171+ return self . id ;
172172 }
173173
174174 let mut node = & mut self . node ;
@@ -185,10 +185,15 @@ impl<'a, T> PathTree<'a, T> {
185185 }
186186 }
187187
188- node. value = Some ( self . id ) ;
189188 self . routes . push ( ( value, pieces) ) ;
190- self . id += 1 ;
191- self
189+ if let Some ( id) = node. value {
190+ id
191+ } else {
192+ let id = self . id ;
193+ node. value = Some ( id) ;
194+ self . id += 1 ;
195+ id
196+ }
192197 }
193198
194199 pub fn find < ' b > ( & ' a self , path : & ' b str ) -> Option < Path < ' a , ' b , T > > {
0 commit comments