1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
use crate::{ops::forc_postgres_createdb, pg::PostgresVersion, utils::db_dir_or_default};
use anyhow::Result;
use clap::Parser;
use fuel_indexer_lib::defaults;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Parser, Clone, Serialize, Deserialize)]
pub struct Command {
#[clap(help = "Name of database.")]
pub name: String,
#[clap(short, long, default_value = defaults::POSTGRES_USER, help = "Database user.")]
pub user: String,
#[clap(short, long, default_value = defaults::POSTGRES_PASSWORD, help = "Database password.")]
pub password: String,
#[clap(short, long, default_value = defaults::POSTGRES_PORT, help = "Port to use.")]
pub port: String,
#[clap(long, help = "Where to store the PostgreSQL database.")]
pub database_dir: Option<PathBuf>,
#[clap(long, default_value = "plain", value_parser(["plain", "md5", "scram-sha-256"]), help = "Authentication method.")]
pub auth_method: String,
#[clap(long, help = "Do not clean up files and directories on database drop.")]
pub persistent: bool,
#[clap(
long,
help = "Duration to wait before terminating process execution for pg_ctl start/stop and initdb."
)]
pub timeout: Option<u64>,
#[clap(long, help = "The directory containing migration scripts.")]
pub migration_dir: Option<PathBuf>,
#[clap(
long,
arg_enum,
default_value = "v14",
help = "PostgreSQL version to use."
)]
pub postgres_version: PostgresVersion,
#[clap(long, help = "Start the PostgreSQL instance after creation.")]
pub start: bool,
#[clap(short, long, help = "Fuel indexer configuration file.")]
pub config: Option<PathBuf>,
}
pub async fn exec(command: Box<Command>) -> Result<()> {
let Command {
name,
user,
password,
port,
database_dir,
auth_method,
persistent,
timeout,
migration_dir,
postgres_version,
start,
config,
} = *command;
let database_dir = db_dir_or_default(database_dir.as_ref(), &name);
forc_postgres_createdb::init(Command {
name,
user,
password,
port,
database_dir: Some(database_dir),
auth_method,
persistent,
timeout,
migration_dir,
postgres_version,
start,
config,
})
.await?;
Ok(())
}