Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F4063698
main.rs
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Referenced Files
None
Subscribers
None
main.rs
View Options
use
std
::
env
;
use
clap
::
{
Args
,
Parser
};
use
crate
::
commands
::
promote
::
promote
;
mod
commands
;
mod
db
;
mod
fantoir
;
mod
services
;
#[derive(Debug, Parser)]
#[command(name =
"fantoir-datasource"
)]
#[clap(author=
"Nasqueron project"
, version, about=
"Import FANTOIR database into PostgreSQL"
, long_about=None)]
enum
FantoirCommand
{
/// Fetch the last version of the FANTOIR file
Fetch
(
FetchArgs
),
/// Import from FANTOIR file generated by the DGFIP
#[command(arg_required_else_help = true)]
Import
(
ImportArgs
),
/// Promote an imported FANTOIR table as the current FANTOIR table to use
#[command(arg_required_else_help = true)]
Promote
(
PromoteArgs
),
/// Query Wikidata SPARQL end-point to enrich FANTOIR information
Wikidata
(
WikidataArgs
),
/// Query the imported FANTOIR table
Query
(
QueryArgs
)
}
#[derive(Debug, Args)]
pub
struct
FetchArgs
{
/// Overwrite file if already existing
#[arg(long)]
overwrite
:
bool
,
}
#[derive(Debug, Args)]
pub
struct
ImportArgs
{
/// Create table if it doesn't exist
#[arg(short = 'c')]
create_table
:
bool
,
/// Truncate table if it already exists, allowing the overwrite mode.
/// If not specified, the script will fail if table exists.
#[arg(short = 't')]
overwrite_table
:
bool
,
/// The FANTOIR file to import
fantoir_file
:
String
,
/// The name of the table to populate
fantoir_table
:
String
,
}
#[derive(Debug, Args)]
pub
struct
PromoteArgs
{
/// The name of the table to promote
fantoir_table
:
String
,
}
#[derive(Debug, Args)]
pub
struct
WikidataArgs
{
/// Create table if it doesn't exist
#[arg(short = 'c')]
create_table
:
bool
,
/// Truncate table if it already exists, allowing the overwrite mode.
/// If not specified, the script will fail if table exists.
#[arg(short = 't')]
overwrite_table
:
bool
,
/// Generate a Wikidata maintenance report instead to print errors to stderr
#[arg(long)]
maintenance_report
:
bool
,
}
#[derive(Debug, Args)]
#[clap(trailing_var_arg=true)]
pub
struct
QueryArgs
{
/// INSEE code to identify a commune
#[arg(long)]
code_insee
:
Option
<
String
>
,
/// Identifier of the voie by the commune
#[arg(long)]
code_voie
:
Option
<
String
>
,
/// Expression to search, FANTOIR code or label of the voie
expression
:
Vec
<
String
>
,
}
#[tokio::main]
async
fn
main
()
{
let
command
=
FantoirCommand
::
parse
();
// Will exit if argument is missing or --help/--version provided.
let
database_url
=
env
::
var
(
"DATABASE_URL"
)
.
expect
(
"The environment variable DATABASE_URL need to be set to your PostgreSQL database."
);
match
command
{
FantoirCommand
::
Fetch
(
args
)
=>
{
commands
::
fetch
::
fetch
(
args
.
overwrite
).
await
;
},
FantoirCommand
::
Import
(
args
)
=>
{
commands
::
import
::
import
(
&
args
,
&
database_url
).
await
;
},
FantoirCommand
::
Promote
(
args
)
=>
{
promote
(
&
args
.
fantoir_table
,
&
database_url
).
await
;
},
FantoirCommand
::
Wikidata
(
args
)
=>
{
commands
::
wikidata
::
import
(
&
args
,
&
database_url
).
await
},
FantoirCommand
::
Query
(
args
)
=>
{
commands
::
query
::
search
(
args
,
&
database_url
).
await
},
};
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Wed, Jan 29, 05:36 (1 d, 9 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2380868
Default Alt Text
main.rs (3 KB)
Attached To
Mode
rDS Nasqueron Datasources
Attached
Detach File
Event Timeline
Log In to Comment