First commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
/target
|
||||
Generated
+8
@@ -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
|
||||
Generated
+8
@@ -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>
|
||||
Generated
+11
@@ -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>
|
||||
Generated
+6
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
Generated
+1593
File diff suppressed because it is too large
Load Diff
+12
@@ -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"
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"version": "1",
|
||||
"name": "NameGen",
|
||||
"type": "collection",
|
||||
"ignore": [
|
||||
"node_modules",
|
||||
".git"
|
||||
]
|
||||
}
|
||||
@@ -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"]
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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é"
|
||||
]
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user