@@ -25,7 +25,7 @@ struct Example {
2525pub enum Message {
2626 Add ,
2727 Download ( usize ) ,
28- DownloadProgressed ( usize , Result < download :: Progress , download :: Error > ) ,
28+ DownloadUpdated ( usize , Update ) ,
2929}
3030
3131impl Example {
@@ -52,15 +52,13 @@ impl Example {
5252
5353 let task = download. start ( ) ;
5454
55- task. map ( move |progress| {
56- Message :: DownloadProgressed ( index, progress)
57- } )
55+ task. map ( move |update| Message :: DownloadUpdated ( index, update) )
5856 }
59- Message :: DownloadProgressed ( id, progress ) => {
57+ Message :: DownloadUpdated ( id, update ) => {
6058 if let Some ( download) =
6159 self . downloads . iter_mut ( ) . find ( |download| download. id == id)
6260 {
63- download. progress ( progress ) ;
61+ download. update ( update ) ;
6462 }
6563
6664 Task :: none ( )
@@ -95,6 +93,12 @@ struct Download {
9593 state : State ,
9694}
9795
96+ #[ derive( Debug , Clone ) ]
97+ pub enum Update {
98+ Downloading ( download:: Progress ) ,
99+ Finished ( Result < ( ) , download:: Error > ) ,
100+ }
101+
98102#[ derive( Debug ) ]
99103enum State {
100104 Idle ,
@@ -111,18 +115,20 @@ impl Download {
111115 }
112116 }
113117
114- pub fn start (
115- & mut self ,
116- ) -> Task < Result < download:: Progress , download:: Error > > {
118+ pub fn start ( & mut self ) -> Task < Update > {
117119 match self . state {
118120 State :: Idle { .. }
119121 | State :: Finished { .. }
120122 | State :: Errored { .. } => {
121- let ( task, handle) = Task :: stream ( download (
122- "https://huggingface.co/\
123+ let ( task, handle) = Task :: sip (
124+ download (
125+ "https://huggingface.co/\
123126 mattshumer/Reflection-Llama-3.1-70B/\
124127 resolve/main/model-00001-of-00162.safetensors",
125- ) )
128+ ) ,
129+ Update :: Downloading ,
130+ Update :: Finished ,
131+ )
126132 . abortable ( ) ;
127133
128134 self . state = State :: Downloading {
@@ -136,20 +142,18 @@ impl Download {
136142 }
137143 }
138144
139- pub fn progress (
140- & mut self ,
141- new_progress : Result < download:: Progress , download:: Error > ,
142- ) {
145+ pub fn update ( & mut self , update : Update ) {
143146 if let State :: Downloading { progress, .. } = & mut self . state {
144- match new_progress {
145- Ok ( download:: Progress :: Downloading { percent } ) => {
146- * progress = percent;
147- }
148- Ok ( download:: Progress :: Finished ) => {
149- self . state = State :: Finished ;
147+ match update {
148+ Update :: Downloading ( new_progress) => {
149+ * progress = new_progress. percent ;
150150 }
151- Err ( _error) => {
152- self . state = State :: Errored ;
151+ Update :: Finished ( result) => {
152+ self . state = if result. is_ok ( ) {
153+ State :: Finished
154+ } else {
155+ State :: Errored
156+ } ;
153157 }
154158 }
155159 }
0 commit comments