@@ -31,23 +31,39 @@ pub use crate::language::UnknownLanguageError;
3131#[ cfg( feature = "pyo3" ) ]
3232use pyo3:: prelude:: * ;
3333
34+ #[ cfg( feature = "pyo3" ) ]
35+ #[ derive( FromPyObject ) ]
36+ pub enum InvalidLetters < ' py > {
37+ String ( Bound < ' py , PyString > ) ,
38+ Chars ( Vec < char > ) ,
39+ }
40+
3441#[ cfg( feature = "pyo3" ) ]
3542#[ pyfunction]
3643#[ pyo3( signature = ( pattern_string, invalid_letters, language, max_words_to_collect) ) ]
3744#[ allow( clippy:: needless_pass_by_value) ]
3845pub fn solve (
3946 pattern_string : Bound < ' _ , PyString > ,
40- invalid_letters : Bound < ' _ , PyString > ,
47+ invalid_letters : InvalidLetters < ' _ > ,
4148 language : Language ,
4249 max_words_to_collect : usize ,
4350) -> PyResult < HangmanResult > {
44- crate :: solver:: solve (
45- & pattern_string,
46- & invalid_letters,
47- true ,
48- language,
49- Some ( max_words_to_collect) ,
50- )
51+ match invalid_letters {
52+ InvalidLetters :: String ( invalid_letters) => crate :: solver:: solve (
53+ & pattern_string,
54+ & invalid_letters,
55+ true ,
56+ language,
57+ Some ( max_words_to_collect) ,
58+ ) ,
59+ InvalidLetters :: Chars ( invalid_letters) => crate :: solver:: solve (
60+ & pattern_string,
61+ & invalid_letters,
62+ true ,
63+ language,
64+ Some ( max_words_to_collect) ,
65+ ) ,
66+ }
5167}
5268
5369#[ cfg( feature = "pyo3" ) ]
@@ -56,17 +72,26 @@ pub fn solve(
5672#[ allow( clippy:: needless_pass_by_value) ]
5773pub fn solve_crossword (
5874 pattern_string : Bound < ' _ , PyString > ,
59- invalid_letters : Bound < ' _ , PyString > ,
75+ invalid_letters : InvalidLetters < ' _ > ,
6076 language : Language ,
6177 max_words_to_collect : usize ,
6278) -> PyResult < HangmanResult > {
63- crate :: solver:: solve (
64- & pattern_string,
65- & invalid_letters,
66- false ,
67- language,
68- Some ( max_words_to_collect) ,
69- )
79+ match invalid_letters {
80+ InvalidLetters :: String ( invalid_letters) => crate :: solver:: solve (
81+ & pattern_string,
82+ & invalid_letters,
83+ false ,
84+ language,
85+ Some ( max_words_to_collect) ,
86+ ) ,
87+ InvalidLetters :: Chars ( invalid_letters) => crate :: solver:: solve (
88+ & pattern_string,
89+ & invalid_letters,
90+ false ,
91+ language,
92+ Some ( max_words_to_collect) ,
93+ ) ,
94+ }
7095}
7196
7297#[ must_use]
0 commit comments