First commit
This commit is contained in:
commit
30531311bb
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/target
|
8
.idea/.gitignore
vendored
Normal file
8
.idea/.gitignore
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/rust-name-gen.iml" filepath="$PROJECT_DIR$/.idea/rust-name-gen.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
11
.idea/rust-name-gen.iml
Normal file
11
.idea/rust-name-gen.iml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="EMPTY_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
6
.idea/vcs.xml
Normal file
6
.idea/vcs.xml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
1593
Cargo.lock
generated
Normal file
1593
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
12
Cargo.toml
Normal file
12
Cargo.toml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
[package]
|
||||||
|
name = "rust-name-gen"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
actix-web = "4"
|
||||||
|
anyhow = "1.0.95"
|
||||||
|
rand = "0.8.5"
|
||||||
|
rust-embed = "8.5.0"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_json = "1.0"
|
9
bruno/NameGen/bruno.json
Normal file
9
bruno/NameGen/bruno.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"version": "1",
|
||||||
|
"name": "NameGen",
|
||||||
|
"type": "collection",
|
||||||
|
"ignore": [
|
||||||
|
"node_modules",
|
||||||
|
".git"
|
||||||
|
]
|
||||||
|
}
|
19
bruno/NameGen/index.bru
Normal file
19
bruno/NameGen/index.bru
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
meta {
|
||||||
|
name: index
|
||||||
|
type: http
|
||||||
|
seq: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: 127.0.0.1:8080
|
||||||
|
body: json
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
|
|
||||||
|
body:json {
|
||||||
|
{
|
||||||
|
"qty": 50,
|
||||||
|
"gender": "f",
|
||||||
|
"dictionaries": ["prenom", "patronyme", "virgule", "article", "commun", "adjectif", "ppasse", "ppresent"]
|
||||||
|
}
|
||||||
|
}
|
23589
dictionaries/adjectifs_feminins.json
Normal file
23589
dictionaries/adjectifs_feminins.json
Normal file
File diff suppressed because it is too large
Load Diff
22633
dictionaries/adjectifs_masculins.json
Normal file
22633
dictionaries/adjectifs_masculins.json
Normal file
File diff suppressed because it is too large
Load Diff
35410
dictionaries/communs_feminins.json
Normal file
35410
dictionaries/communs_feminins.json
Normal file
File diff suppressed because it is too large
Load Diff
34784
dictionaries/communs_masculins.json
Normal file
34784
dictionaries/communs_masculins.json
Normal file
File diff suppressed because it is too large
Load Diff
61958
dictionaries/patronymes.json
Normal file
61958
dictionaries/patronymes.json
Normal file
File diff suppressed because it is too large
Load Diff
11058
dictionaries/ppasses_feminins.json
Normal file
11058
dictionaries/ppasses_feminins.json
Normal file
File diff suppressed because it is too large
Load Diff
11970
dictionaries/ppasses_masculins.json
Normal file
11970
dictionaries/ppasses_masculins.json
Normal file
File diff suppressed because it is too large
Load Diff
11939
dictionaries/ppresents_feminins.json
Normal file
11939
dictionaries/ppresents_feminins.json
Normal file
File diff suppressed because it is too large
Load Diff
11939
dictionaries/ppresents_masculins.json
Normal file
11939
dictionaries/ppresents_masculins.json
Normal file
File diff suppressed because it is too large
Load Diff
285
dictionaries/prenoms_feminins.json
Normal file
285
dictionaries/prenoms_feminins.json
Normal file
|
@ -0,0 +1,285 @@
|
||||||
|
[
|
||||||
|
"Adélaïde",
|
||||||
|
"Adèle",
|
||||||
|
"Adeline",
|
||||||
|
"Adrienne",
|
||||||
|
"Agathe",
|
||||||
|
"Agnès",
|
||||||
|
"Aimée",
|
||||||
|
"Albertine",
|
||||||
|
"Alexandrie",
|
||||||
|
"Aline",
|
||||||
|
"Alphonsine",
|
||||||
|
"Amarante",
|
||||||
|
"Ambre",
|
||||||
|
"Amélie",
|
||||||
|
"Anastasie",
|
||||||
|
"Andrée",
|
||||||
|
"Angèle",
|
||||||
|
"Angeline",
|
||||||
|
"Angelique",
|
||||||
|
"Anne",
|
||||||
|
"Annette",
|
||||||
|
"Antoinette",
|
||||||
|
"Apolline",
|
||||||
|
"Arianne",
|
||||||
|
"Arienne",
|
||||||
|
"Arlette",
|
||||||
|
"Armelle",
|
||||||
|
"Arnaude",
|
||||||
|
"Aude",
|
||||||
|
"Aurélie",
|
||||||
|
"Aurore",
|
||||||
|
"Avril",
|
||||||
|
"Axelle",
|
||||||
|
"Béatrice",
|
||||||
|
"Bénédicte",
|
||||||
|
"Benjamine",
|
||||||
|
"Benoite",
|
||||||
|
"Bernadette",
|
||||||
|
"Berthe",
|
||||||
|
"Blanche",
|
||||||
|
"Camille",
|
||||||
|
"Carine",
|
||||||
|
"Carole",
|
||||||
|
"Caroline",
|
||||||
|
"Cécile",
|
||||||
|
"Céleste",
|
||||||
|
"Célestine",
|
||||||
|
"Céline",
|
||||||
|
"Cerise",
|
||||||
|
"Chantal",
|
||||||
|
"Chanté",
|
||||||
|
"Charline",
|
||||||
|
"Charlotte",
|
||||||
|
"Chloé",
|
||||||
|
"Christelle",
|
||||||
|
"Christine",
|
||||||
|
"Claire",
|
||||||
|
"Clarisse",
|
||||||
|
"Claude",
|
||||||
|
"Claudette",
|
||||||
|
"Claudine",
|
||||||
|
"Clémence",
|
||||||
|
"Clementine",
|
||||||
|
"Clothilde",
|
||||||
|
"Colette",
|
||||||
|
"Colombe",
|
||||||
|
"Corinne",
|
||||||
|
"Cosette",
|
||||||
|
"Cunégonde",
|
||||||
|
"Cyrille",
|
||||||
|
"Danièle",
|
||||||
|
"Danielle",
|
||||||
|
"Delphine",
|
||||||
|
"Denise",
|
||||||
|
"Désirée",
|
||||||
|
"Diane",
|
||||||
|
"Dianne",
|
||||||
|
"Dieudonnée",
|
||||||
|
"Dominique",
|
||||||
|
"Donatienne",
|
||||||
|
"Doriane",
|
||||||
|
"Dorothée",
|
||||||
|
"Édith",
|
||||||
|
"Edwige",
|
||||||
|
"Eléonore",
|
||||||
|
"Éliane",
|
||||||
|
"Élise",
|
||||||
|
"Élodie",
|
||||||
|
"Éloise",
|
||||||
|
"Emeline",
|
||||||
|
"Émilie",
|
||||||
|
"Emmanuelle",
|
||||||
|
"Esmé",
|
||||||
|
"Esmée",
|
||||||
|
"Eugénie",
|
||||||
|
"Eulalie",
|
||||||
|
"Evette",
|
||||||
|
"Fabienne",
|
||||||
|
"Faustine",
|
||||||
|
"Félicie",
|
||||||
|
"Felicienne",
|
||||||
|
"Fernande",
|
||||||
|
"Fifi",
|
||||||
|
"Flavie",
|
||||||
|
"Florette",
|
||||||
|
"Florianne",
|
||||||
|
"Francine",
|
||||||
|
"Françoise",
|
||||||
|
"Frédérique",
|
||||||
|
"Gabrielle",
|
||||||
|
"Gaetane",
|
||||||
|
"Geneviève",
|
||||||
|
"Georgette",
|
||||||
|
"Georgine",
|
||||||
|
"Germaine",
|
||||||
|
"Gervaise",
|
||||||
|
"Ghislaine",
|
||||||
|
"Gigi",
|
||||||
|
"Gilberte",
|
||||||
|
"Gisèle",
|
||||||
|
"Giselle",
|
||||||
|
"Gisselle",
|
||||||
|
"Gwenaelle",
|
||||||
|
"Hélène",
|
||||||
|
"Héloïse",
|
||||||
|
"Henriette",
|
||||||
|
"Honorine",
|
||||||
|
"Hortense",
|
||||||
|
"Hyacinthe",
|
||||||
|
"Inès",
|
||||||
|
"Irène",
|
||||||
|
"Irénée",
|
||||||
|
"Jacinthe",
|
||||||
|
"Jacqueline",
|
||||||
|
"Jeanine",
|
||||||
|
"Jeanne",
|
||||||
|
"Jeannette",
|
||||||
|
"Jeannine",
|
||||||
|
"Joceline",
|
||||||
|
"Joelle",
|
||||||
|
"Jolie",
|
||||||
|
"Josée",
|
||||||
|
"Josèphe",
|
||||||
|
"Joséphine",
|
||||||
|
"Josette",
|
||||||
|
"Josiane",
|
||||||
|
"Juliane",
|
||||||
|
"Julie",
|
||||||
|
"Julienne",
|
||||||
|
"Juliette",
|
||||||
|
"Justine",
|
||||||
|
"Laure",
|
||||||
|
"Laurence",
|
||||||
|
"Laurentine",
|
||||||
|
"Laurette",
|
||||||
|
"Léa",
|
||||||
|
"Léonie",
|
||||||
|
"Léonne",
|
||||||
|
"Léontine",
|
||||||
|
"Liane",
|
||||||
|
"Lisette",
|
||||||
|
"Louise",
|
||||||
|
"Luce",
|
||||||
|
"Lucie",
|
||||||
|
"Lucienne",
|
||||||
|
"Lucile",
|
||||||
|
"Lucille",
|
||||||
|
"Lucinde",
|
||||||
|
"Lucrece",
|
||||||
|
"Lunete",
|
||||||
|
"Lydie",
|
||||||
|
"Madeleine",
|
||||||
|
"Madeline",
|
||||||
|
"Manon",
|
||||||
|
"Marceline",
|
||||||
|
"Marcelle",
|
||||||
|
"Marcellette",
|
||||||
|
"Marcelline",
|
||||||
|
"Margot",
|
||||||
|
"Marguerite",
|
||||||
|
"Marianne",
|
||||||
|
"Marie",
|
||||||
|
"Marielle",
|
||||||
|
"Mariette",
|
||||||
|
"Marine",
|
||||||
|
"Marise",
|
||||||
|
"Marthe",
|
||||||
|
"Martine",
|
||||||
|
"Mathilde",
|
||||||
|
"Maximilienne",
|
||||||
|
"Mélanie",
|
||||||
|
"Mélissa",
|
||||||
|
"Michèle",
|
||||||
|
"Micheline",
|
||||||
|
"Michelle",
|
||||||
|
"Mignon",
|
||||||
|
"Mirabelle",
|
||||||
|
"Mireille",
|
||||||
|
"Monique",
|
||||||
|
"Morgaine",
|
||||||
|
"Morgane",
|
||||||
|
"Myriam",
|
||||||
|
"Nadia",
|
||||||
|
"Nadine",
|
||||||
|
"Natalie",
|
||||||
|
"Nathalie",
|
||||||
|
"Nicole",
|
||||||
|
"Nicolette",
|
||||||
|
"Ninette",
|
||||||
|
"Ninon",
|
||||||
|
"Noella",
|
||||||
|
"Noelle",
|
||||||
|
"Noémie",
|
||||||
|
"Océane",
|
||||||
|
"Odette",
|
||||||
|
"Odile",
|
||||||
|
"Olivie",
|
||||||
|
"Olympe",
|
||||||
|
"Oriane",
|
||||||
|
"Orianne",
|
||||||
|
"Osanne",
|
||||||
|
"Ouida",
|
||||||
|
"Ozanne",
|
||||||
|
"Pascale",
|
||||||
|
"Pascaline",
|
||||||
|
"Paule",
|
||||||
|
"Paulette",
|
||||||
|
"Pauline",
|
||||||
|
"Pénélope",
|
||||||
|
"Perrine",
|
||||||
|
"Philippine",
|
||||||
|
"Placide",
|
||||||
|
"Raymonde",
|
||||||
|
"Rébecca",
|
||||||
|
"Régine",
|
||||||
|
"Reine",
|
||||||
|
"Renée",
|
||||||
|
"Rochelle",
|
||||||
|
"Rolande",
|
||||||
|
"Romaine",
|
||||||
|
"Rosalie",
|
||||||
|
"Roselle",
|
||||||
|
"Rosemonde",
|
||||||
|
"Rosette",
|
||||||
|
"Rosine",
|
||||||
|
"Roxane",
|
||||||
|
"Sabine",
|
||||||
|
"Sacha",
|
||||||
|
"Salomé",
|
||||||
|
"Sandrine",
|
||||||
|
"Sébastienne",
|
||||||
|
"Seraphine",
|
||||||
|
"Sévérine",
|
||||||
|
"Sidonie",
|
||||||
|
"Simone",
|
||||||
|
"Solange",
|
||||||
|
"Sophie",
|
||||||
|
"Stéphanie",
|
||||||
|
"Suzanne",
|
||||||
|
"Suzette",
|
||||||
|
"Sylvaine",
|
||||||
|
"Sylviane",
|
||||||
|
"Sylvianne",
|
||||||
|
"Sylvie",
|
||||||
|
"Tatienne",
|
||||||
|
"Thérèse",
|
||||||
|
"Toinette",
|
||||||
|
"Valentine",
|
||||||
|
"Valérie",
|
||||||
|
"Véronique",
|
||||||
|
"Victoire",
|
||||||
|
"Victorine",
|
||||||
|
"Vienne",
|
||||||
|
"Violette",
|
||||||
|
"Virginie",
|
||||||
|
"Vivien",
|
||||||
|
"Vivienne",
|
||||||
|
"Yolande",
|
||||||
|
"Yseult",
|
||||||
|
"Yvette",
|
||||||
|
"Yvonne",
|
||||||
|
"Zephyrine",
|
||||||
|
"Zoé"
|
||||||
|
]
|
204
dictionaries/prenoms_masculins.json
Normal file
204
dictionaries/prenoms_masculins.json
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
[
|
||||||
|
"Absolon",
|
||||||
|
"Achille",
|
||||||
|
"Adolphe",
|
||||||
|
"Adrien",
|
||||||
|
"Aimé",
|
||||||
|
"Alain",
|
||||||
|
"Alexandre",
|
||||||
|
"Alphonse",
|
||||||
|
"Amaury",
|
||||||
|
"Ambroise",
|
||||||
|
"Amédée",
|
||||||
|
"Anatole",
|
||||||
|
"André",
|
||||||
|
"Anselme",
|
||||||
|
"Antoine",
|
||||||
|
"Apollinaire",
|
||||||
|
"Aristide",
|
||||||
|
"Armand",
|
||||||
|
"Armel",
|
||||||
|
"Arnaud",
|
||||||
|
"Auguste",
|
||||||
|
"Augustin",
|
||||||
|
"Aurèle",
|
||||||
|
"Aurelien",
|
||||||
|
"Baptiste",
|
||||||
|
"Barnabé",
|
||||||
|
"Barthélémy",
|
||||||
|
"Basile",
|
||||||
|
"Bastien",
|
||||||
|
"Baudouin",
|
||||||
|
"Benoit",
|
||||||
|
"Bertrand",
|
||||||
|
"Blaise",
|
||||||
|
"Brice",
|
||||||
|
"Camille",
|
||||||
|
"Célestin",
|
||||||
|
"Cesaire",
|
||||||
|
"César",
|
||||||
|
"Charlot",
|
||||||
|
"Christophe",
|
||||||
|
"Claude",
|
||||||
|
"Clément",
|
||||||
|
"Colombain",
|
||||||
|
"Colombe",
|
||||||
|
"Constantin",
|
||||||
|
"Corin",
|
||||||
|
"Cyrille",
|
||||||
|
"Damien",
|
||||||
|
"Denis",
|
||||||
|
"Désiré",
|
||||||
|
"Didier",
|
||||||
|
"Dieudonné",
|
||||||
|
"Diodore",
|
||||||
|
"Dion",
|
||||||
|
"Dominique",
|
||||||
|
"Donat",
|
||||||
|
"Donatien",
|
||||||
|
"Edgard",
|
||||||
|
"Edmond",
|
||||||
|
"Édouard",
|
||||||
|
"Eloi",
|
||||||
|
"Émile",
|
||||||
|
"Émilien",
|
||||||
|
"Ermenegilde",
|
||||||
|
"Esmé",
|
||||||
|
"Étienne",
|
||||||
|
"Eugène",
|
||||||
|
"Eustache",
|
||||||
|
"Évariste",
|
||||||
|
"Evrard",
|
||||||
|
"Fabien",
|
||||||
|
"Fabrice",
|
||||||
|
"Felicien",
|
||||||
|
"Félix",
|
||||||
|
"Fernand",
|
||||||
|
"Fiacre",
|
||||||
|
"Firmin",
|
||||||
|
"Florentin",
|
||||||
|
"Franck",
|
||||||
|
"François",
|
||||||
|
"Frédéric",
|
||||||
|
"Gaétan",
|
||||||
|
"Gaspard",
|
||||||
|
"Gaston",
|
||||||
|
"Gautier",
|
||||||
|
"Geoffroi",
|
||||||
|
"Georges",
|
||||||
|
"Gérald",
|
||||||
|
"Gérard",
|
||||||
|
"Géraud",
|
||||||
|
"Germain",
|
||||||
|
"Gervais",
|
||||||
|
"Ghislain",
|
||||||
|
"Gilles",
|
||||||
|
"Godelieve",
|
||||||
|
"Gratien",
|
||||||
|
"Grégoire",
|
||||||
|
"Guillaume",
|
||||||
|
"Gustave",
|
||||||
|
"Henri",
|
||||||
|
"Hercule",
|
||||||
|
"Hervé",
|
||||||
|
"Hilaire",
|
||||||
|
"Honoré",
|
||||||
|
"Hugues",
|
||||||
|
"Ignace",
|
||||||
|
"Iréné",
|
||||||
|
"Jacques",
|
||||||
|
"Jean",
|
||||||
|
"Jean-Baptiste",
|
||||||
|
"Jean-Marie",
|
||||||
|
"Jean-Pierre",
|
||||||
|
"Jeannot",
|
||||||
|
"Jérémie",
|
||||||
|
"Jérôme",
|
||||||
|
"Joël",
|
||||||
|
"Jourdain",
|
||||||
|
"Jules",
|
||||||
|
"Julien",
|
||||||
|
"Juste",
|
||||||
|
"Laurent",
|
||||||
|
"Lazare",
|
||||||
|
"Léandre",
|
||||||
|
"Léon",
|
||||||
|
"Léonard",
|
||||||
|
"Léonce",
|
||||||
|
"Léopold",
|
||||||
|
"Lionel",
|
||||||
|
"Loic",
|
||||||
|
"Lothaire",
|
||||||
|
"Louis",
|
||||||
|
"Loup",
|
||||||
|
"Luc",
|
||||||
|
"Lucien",
|
||||||
|
"Marc",
|
||||||
|
"Marcel",
|
||||||
|
"Marcellin",
|
||||||
|
"Marin",
|
||||||
|
"Mathieu",
|
||||||
|
"Matthieu",
|
||||||
|
"Maxime",
|
||||||
|
"Maximilien",
|
||||||
|
"Michel",
|
||||||
|
"Modeste",
|
||||||
|
"Modestine",
|
||||||
|
"Narcisse",
|
||||||
|
"Nazaire",
|
||||||
|
"Nicodème",
|
||||||
|
"Nicolas",
|
||||||
|
"Noé",
|
||||||
|
"Noel",
|
||||||
|
"Olivier",
|
||||||
|
"Onesime",
|
||||||
|
"Osanne",
|
||||||
|
"Ozanne",
|
||||||
|
"Papillion",
|
||||||
|
"Pascal",
|
||||||
|
"Paschal",
|
||||||
|
"Patrice",
|
||||||
|
"Perceval",
|
||||||
|
"Philibert",
|
||||||
|
"Philippe",
|
||||||
|
"Pierre",
|
||||||
|
"Pons",
|
||||||
|
"Prosper",
|
||||||
|
"Rainier",
|
||||||
|
"Raoul",
|
||||||
|
"Raphaël",
|
||||||
|
"Régis",
|
||||||
|
"Rémi",
|
||||||
|
"Rémy",
|
||||||
|
"Renard",
|
||||||
|
"Renaud",
|
||||||
|
"René",
|
||||||
|
"Reynaud",
|
||||||
|
"Roch",
|
||||||
|
"Rodolphe",
|
||||||
|
"Rodrigue",
|
||||||
|
"Romain",
|
||||||
|
"Sacha",
|
||||||
|
"Sébastien",
|
||||||
|
"Serge",
|
||||||
|
"Séverin",
|
||||||
|
"Stéphane",
|
||||||
|
"Sylvain",
|
||||||
|
"Sylvestre",
|
||||||
|
"Telesphore",
|
||||||
|
"Theirn",
|
||||||
|
"Théo",
|
||||||
|
"Théodore",
|
||||||
|
"Théophile",
|
||||||
|
"Thibault",
|
||||||
|
"Thierry",
|
||||||
|
"Timothée",
|
||||||
|
"Toussaint",
|
||||||
|
"Urbain",
|
||||||
|
"Valère",
|
||||||
|
"Valéry",
|
||||||
|
"Vespasien",
|
||||||
|
"Vivien",
|
||||||
|
"Yves",
|
||||||
|
"Zacharie"
|
||||||
|
]
|
107
src/main.rs
Normal file
107
src/main.rs
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
use std::{collections::HashMap, str::from_utf8};
|
||||||
|
|
||||||
|
use actix_web::{get, web, App, HttpResponse, HttpServer};
|
||||||
|
use rand::seq::SliceRandom;
|
||||||
|
use rust_embed::Embed;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
static ARTICLE: &str = "<article>";
|
||||||
|
|
||||||
|
#[derive(Embed)]
|
||||||
|
#[folder = "dictionaries/"]
|
||||||
|
struct Dictionaries;
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
struct NameGenQuery {
|
||||||
|
dictionaries: Vec<String>,
|
||||||
|
gender: String,
|
||||||
|
qty: Option<u8>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/")]
|
||||||
|
async fn index(query: web::Json<NameGenQuery>) -> HttpResponse {
|
||||||
|
// Load the dictionaries into memory
|
||||||
|
let mut dictionaries = HashMap::new();
|
||||||
|
for filename in Dictionaries::iter() {
|
||||||
|
if let Some(file) = Dictionaries::get(&filename) {
|
||||||
|
let data = from_utf8(file.data.as_ref()).unwrap();
|
||||||
|
dictionaries.insert(filename.to_string(), serde_json::from_str::<Vec<String>>(data).unwrap());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let qty = query.0.qty.unwrap_or(10).min(50).max(1);
|
||||||
|
let gender = match query.0.gender.as_str() {
|
||||||
|
"m" => "masculins",
|
||||||
|
"f" => "feminins",
|
||||||
|
_ => "masculins",
|
||||||
|
};
|
||||||
|
|
||||||
|
// Limit to 10 parts max
|
||||||
|
let mut chosen_dicts = query.0.dictionaries;
|
||||||
|
chosen_dicts.truncate(10);
|
||||||
|
|
||||||
|
let mut names = vec![];
|
||||||
|
|
||||||
|
for _ in 0..qty {
|
||||||
|
let mut parts = vec![];
|
||||||
|
|
||||||
|
for dict in chosen_dicts.iter() {
|
||||||
|
let filename = match dict.as_str() {
|
||||||
|
"adjectif" | "commun" | "ppasse" | "ppresent" | "prenom" => {
|
||||||
|
Some(format!("{dict}s_{gender}.json"))
|
||||||
|
}
|
||||||
|
"patronyme" => Some(format!("{dict}s.json")),
|
||||||
|
"article" => Some(ARTICLE.to_string()),
|
||||||
|
"virgule" => Some(",".to_string()),
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
if let Some(filename) = filename {
|
||||||
|
if let Some(data) = dictionaries.get(&filename) {
|
||||||
|
let item = data.choose(&mut rand::thread_rng()).unwrap();
|
||||||
|
parts.push(item.to_string())
|
||||||
|
} else {
|
||||||
|
parts.push(filename)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the <article> with le/la/l'
|
||||||
|
let mut to_replace = vec![];
|
||||||
|
for (i, item) in parts.iter().enumerate() {
|
||||||
|
if item == ARTICLE {
|
||||||
|
// Check the next word
|
||||||
|
if let Some(next) = parts.get(i + 1) {
|
||||||
|
if next
|
||||||
|
.starts_with(|c| vec!['a', 'e', 'i', 'o', 'u', 'é', 'è', 'ê', 'h'].contains(&c))
|
||||||
|
{
|
||||||
|
to_replace.push((i, "l'"));
|
||||||
|
} else {
|
||||||
|
to_replace.push((i, (if gender == "masculins" { "le" } else { "la" })))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for item in to_replace.iter() {
|
||||||
|
parts[item.0] = item.1.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
let joined = parts
|
||||||
|
.join(" ")
|
||||||
|
// Remove space after "l'"
|
||||||
|
.replace("l' ", "l'")
|
||||||
|
// Remove space before comma
|
||||||
|
.replace(" ,", ",");
|
||||||
|
|
||||||
|
names.push(joined);
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpResponse::Ok().json(names)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[actix_web::main] // or #[tokio::main]
|
||||||
|
async fn main() -> std::io::Result<()> {
|
||||||
|
HttpServer::new(|| App::new().service(index))
|
||||||
|
.bind(("127.0.0.1", 8080))?
|
||||||
|
.run()
|
||||||
|
.await
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user