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