if name.is_empty() { self.send(Vec::new(), false, true).await?; } else if name.len() > 12 || name.len() < 3 || !name.bytes().all(|byte| byte.is_ascii_alphabetic()) { self.send(b"Nome non valido, riprova.\n\rCon che nome vuoi essere conosciuto su Therial?: ".to_vec(), false, false).await?; self.phase = Phase::Name; } else if let Some(character) = self.store.find_character(name).await? { self.send(b"Password: ".to_vec(), true, false).await?; self.phase = Phase::Password { name: character.name, failures: 0, }; } else { self.send(b"\n\rAnteprima Rust: usa il personaggio Viandante. I profili originali sono conservati separatamente.\n\rCon che nome vuoi essere conosciuto?\n\r".to_vec(), false, false).await?; self.phase = Phase::Name; } } Phase::Password { name, failures } => { if let Some(character) = self .store .authenticate(&name, input.trim_start().to_owned()) .await? { self.send(b"\n\r".to_vec(), false, false).await?; self.send(MENU.as_bytes().to_vec(), false, false).await?; self.phase = Phase::Entrance(character);