@@ -127,7 +143,11 @@ impl std::fmt::Display for Instruction {
}
}
```
### 1.2.6. FromStr
On parcours `s` et on fabrique un `Instruction` en fonction de ce qui était contenu dedans :
```rs
#[derive(Debug,PartialEq)]
enumInstructionError{
...
...
@@ -178,6 +198,9 @@ impl std::str::FromStr for Instruction {
}
```
### 1.2.7. TryFrom<&[u8]> for Instruction
On construit un `Instruction` simplement avec un match :
```rs
#[derive(Debug)]
enumTryFromInstructionError{
...
...
@@ -218,7 +241,11 @@ impl TryFrom<&[u8]> for Instruction {
}
}
```
### 1.2.8. From<Instruction> for [u8; 9]
Comme pour la question précédente on parcours le paramètre, mais cette fois en reprenant la logique de construction d'un `Instruction` à partir d'un `[u8; 9]` mais dans l'autre sens :
```rs
implFrom<Instruction>for[u8;9]{
fnfrom(inst:Instruction)->Self{
...
...
@@ -249,12 +276,20 @@ impl From<Instruction> for [u8; 9] {
}
}
```
### 1.2.9. Tests
Normalement les tests passent :
```shell
cargo test
```
# 2. Generics
## 2.1. Without trait bounds
Pour chaque méthode on vérifie dans quel cas de `Either` l'on est et on retourne la bonne réponse :
```rs
enumEither<L,R>{
Left(L),
...
...
@@ -303,7 +338,11 @@ impl<L, R> Either<L, R> {
}
}
```
## 2.2. With trait bounds
On utilise `where` pour préciser que les trait bounds. Pour encoder et décoder, on lit ce qui est sur le `reader` et pour chaque ligne on encode ou décode avec `encoder.encode()` ou `decoder.decode()`, puis on l'écrit sur le `writer` :
On peut choisir le mode en entrant 1 ou 2, puis pour Tic Tac Toe entrer les coordonnées sous la forme `row col` et pour Nim en entrant le nombre de cailloux et à chaque tour le nombre que l'on prend :