рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╢реБрджреНрдз рдЬрдВрдЧ рдореЗрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдПрд╕рдПрдордПрд╕ рдХреЗ рдмрд┐рдирд╛

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!

рдХрднреА-рдХрднреА рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХрд┐рд╕реА рдХреЛ рд╢рд╛рдЦрд╛рдУрдВ рдФрд░ рдЫреЛрд░реЛрдВ рд╡рд╛рд▓реЗ рдЬрдЯрд┐рд▓ рд╕рдВрдкрд░реНрдХ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рджреГрд╢реНрдп рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░рд╛рдЬреНрдп рдорд╢реАрди рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ - рд╕рддреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдПрдХ рд░рд╛рдЬреНрдп рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдорд╛рд░реНрдЧ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рднреА рдЙрдЪрд┐рдд рд╣реИ, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреБрдЫ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рд╕рдВрд╡рд╛рдж рдХреЛ рд▓реВрдк рдореЗрдВ рджреЛрд╣рд░рд╛рдПрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред .Dред рдкрд╣рд▓реЗ, рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреА рдереАрдВ рдЬреЛ рд╕реНрдЯреИрдХ рдорд╢реАрди рдХреА рдирдХрд▓ рдХрд░рддреА рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рд▓рдЧрднрдЧ рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЙрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗрд╡рд╛ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЗрд╕рдХреЗ рд╕реНрдЯреИрдХ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд╕рд╛рде, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрд╣ рдбреЗрдЯрд╛ рдФрд░ рдорд╛рд░реНрдЧ рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреИрдирд▓ рд╕реЗ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдкрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде рдЧреЛрд░реЛрдЗрди рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рдзрд╛рдЧрд╛ рдореБрдХреНрдд рдирд╣реАрдВ рд╣реИ , рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╣рдо рд░рд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдзрд╛рдЧреЗ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдирд░реЗрдЯрд░ рдФрд░ рдПрд╕рд┐рдВрдХреНрд╕ рдпрд╛ рд╡реЗрдЯ рд╣реИрдВ ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░рд▓ http-bot рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ html рдлреЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рд╕рд╡рд╛рд▓ рдкреВрдЫрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рдХрд┐ рд╡рд╣ рдЕрдЪреНрдЫрд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рд╕рд░рд▓ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб http-server рд╣реИ, рд╣рдо рдмрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░рд╕реНрдЯ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрдирд░реЗрдЯрд░ рджреЛ-рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдЖрдк рдкреНрд░рд╢реНрди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: my_generator.next (my_question);
рдФрд░ рдЗрд╕рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ: my_response рдЙрдкрдЬ;
рдЬрдВрдЧ рдореЗрдВ, рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЛ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░реНрдЪрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╕рд╛рдЭрд╛ рд╕реЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдФрд░ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛ рдирд┐рд╣рд┐рдд рд╣реИред рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ create_scenario () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдЬреЛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╡рд╣ рдХреНрд▓реЛрдЬрд░ рдЬрд┐рд╕рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - udata рдбреЗрдЯрд╛ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ред рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реЗрд▓ рдХреЛ рдбреЗрдЯрд╛ рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде, рд╕реНрдЯреИрдХ рдХреА рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред

#[derive(Default, Clone)] struct UserData { sid: String, msg_in: String, msg_out: String, script: String, } type UserDataCell = Rc<RefCell<UserData>>; struct UserSession { udata: UserDataCell, scenario: Pin<Box<dyn Generator<Yield = (), Return = ()>>>, } type UserSessions = HashMap<String, UserSession>; fn create_scenario(udata: UserDataCell) -> impl Generator<Yield = (), Return = ()> { move || { let uname; let mut umood; udata.borrow_mut().msg_out = format!("Hi, what is you name ?"); yield (); uname = udata.borrow().msg_in.clone(); udata.borrow_mut().msg_out = format!("{}, how are you feeling ?", uname); yield (); 'not_ok: loop { umood = udata.borrow().msg_in.clone(); if umood.to_lowercase() == "ok" { break 'not_ok; } udata.borrow_mut().msg_out = format!("{}, think carefully, maybe you're ok ?", uname); yield (); umood = udata.borrow().msg_in.clone(); if umood.to_lowercase() == "ok" { break 'not_ok; } udata.borrow_mut().msg_out = format!("{}, millions of people are starving, maybe you're ok ?", uname); yield (); } udata.borrow_mut().msg_out = format!("{}, good bye !", uname); return (); } } 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ - рд╕реЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╛рда рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрдкрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рджреЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдб рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░рд╛ рдЬрдирд░реЗрдЯрд░ рдПрдХ рдЦрд╛рд▓реА рдирд▓рд┐рдХрд╛ () рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдбреЗрдЯрд╛ рдПрдХ рдЖрдо рд╕реЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рд░реЗрдлрд░реА <рд╕реЗрд▓ <... >> рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЕрдВрджрд░, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдзрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдзрд╛рд░ () рд╕реЗрд▓ рдЙрдкрдЬ рдмрд┐рдВрджреБ рдХреЛ рдкрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ - рдЗрд╕рд▓рд┐рдП, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдмрд╛рд░ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ udata_mut = udata.borrow_mut () , рдФрд░ред рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдЬ рдХреЗ рдмрд╛рдж рдПрдХ рдореВрд▓реНрдп рдЙрдзрд╛рд░ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред

рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдИрд╡реЗрдВрдЯ рд▓реВрдк (рд╕реЙрдХреЗрдЯ рд╕реЗ рдкрдврд╝рдирд╛) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╣рдо рдпрд╛ рддреЛ рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдпрд╛ рдореМрдЬреВрджрд╛ рдХреЛ рдЦреЛрдЬрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:

 let mut udata: UserData = read_udata(&mut stream); let mut sid = udata.sid.clone(); let session; if sid == "" { //new session sid = rnd.gen::<u64>().to_string(); udata.sid = sid.clone(); let udata_cell = Rc::new(RefCell::new(udata)); sessions.insert( sid.clone(), UserSession { udata: udata_cell.clone(), scenario: Box::pin(create_scenario(udata_cell)), } ); session = sessions.get_mut(&sid).unwrap(); } else { match sessions.get_mut(&sid) { Some(s) => { session = s; session.udata.replace(udata); } None => { println!("unvalid sid: {}", &sid); continue; } } } 

рдЕрдЧрд▓рд╛, рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕реЙрдХреЗрдЯ рдореЗрдВ рд╡рд╛рдкрд╕ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ, рдЬрдм рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рд╕рддреНрд░ рдХреЛ рд╣реИрд╢рдореИрдк рд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ html рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ js рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВред

 udata = match session.scenario.as_mut().resume() { GeneratorState::Yielded(_) => session.udata.borrow().clone(), GeneratorState::Complete(_) => { let mut ud = sessions.remove(&sid).unwrap().udata.borrow().clone(); ud.script = format!("document.getElementById('form').style.display = 'none'"); ud } }; write_udata(&udata, &mut stream); 

рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЛрдб рдпрд╣рд╛рдБ:
github.com/epishman/habr_samples/blob/master/chatbot/main.rs

рдореИрдВ "рд╕рд╛рдореВрд╣рд┐рдХ рдлрд╛рд░реНрдо" http рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ, рдЬреЛ рд╕рд┐рд░рд┐рд▓рд┐рдХ рдЗрдирдкреБрдЯ рдХрд╛ рд╕рдорд░реНрдерди рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдорд╛рдирдХ рднрд╛рд╖рд╛ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдПрд╕рдПрдордПрд╕ рдХреЗред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд▓реЛрдирд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рдЙрдзрд╛рд░_рдореБрдЯ тАЛтАЛ() рдФрд░ рдХреНрд▓реЛрди () рдХреЗ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд╡рдпрдВ рдмрд╣реБрдд рдХреЙрдореНрдкреИрдХреНрдЯ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИред рд╕рдВрднрд╡рдд: рдЕрдиреБрднрд╡реА рд░рд╕реНрддрдордг рдЗрд╕реЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдиреНрдпреВрдирддрдо рд╕рд╛рдзрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рдкреБрдирд╢реНрдЪ
рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд░рд╛рдд рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 rustup default nightly rustup update 

рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд╕рд╛рдерд┐рдпреЛрдВ рдиреЗ рдореБрдЭреЗ рдЬрдирд░реЗрдЯрд░ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХреА:
stackoverflow.com/questions/56460206/how-can-i-transfer-some-values-into-a-rust-generator-at-each-step

Source: https://habr.com/ru/post/hi455010/


All Articles