Skip to content

Commit 31d817d

Browse files
authored
Merge pull request #4 from oniony/more-refactoring
chore(refactor): Refactoring project layout
2 parents 5995560 + cd0174d commit 31d817d

File tree

18 files changed

+457
-496
lines changed

18 files changed

+457
-496
lines changed

TODO.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
* [ ] Get integration tests to snapshot database
1+
* [ ] Split into lib and executable

src/cli/args.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use clap::{Parser, ValueEnum};
2+
3+
#[derive(Parser, Debug)]
4+
#[command(version, about, long_about = None)]
5+
pub struct Args {
6+
#[arg(short, long, short = 'l', help = "The left database URL")]
7+
pub left: String,
8+
9+
#[arg(short, long, short = 'r', help = "The right database URL")]
10+
pub right: String,
11+
12+
#[arg(short, long, required = true, short = 's', help = "Schema to compare")]
13+
pub schema: Vec<String>,
14+
15+
#[arg(short, long, short = 'w', help = "Ignore routine whitespace differences")]
16+
pub ignore_whitespace: bool,
17+
18+
#[arg(short, long, short = 'o', help = "Ignore column ordering differences")]
19+
pub ignore_column_ordinal: bool,
20+
21+
#[arg(short, long, short = 'p', help = "Ignore privilege changes")]
22+
pub ignore_privileges: bool,
23+
24+
#[arg(short, long, short = 'v', help = "Show matches")]
25+
pub verbose: bool,
26+
27+
#[arg(short, long, short = 'c', alias = "colour", help = "Use colour", default_value = "auto")]
28+
pub color: Colouring,
29+
}
30+
31+
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
32+
pub enum Colouring {
33+
Auto,
34+
Always,
35+
Never,
36+
}

src/cli/mod.rs

Lines changed: 37 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,33 @@
1+
mod args;
2+
13
use std::process;
2-
use clap::{Parser, ValueEnum};
4+
use clap::{Parser};
35
use colored::Colorize;
46
use postgres::Error;
57

68
use crate::{compare, db};
7-
use crate::compare::report::PrivilegeComparison::{PrivilegeAdded, PrivilegeMaintained, PrivilegeRemoved};
8-
use crate::compare::report::{HasChanges, TableColumnReport, TableConstraintReport, SchemaReport, RoutineReport, SequenceReport, ViewReport, PropertyReport, PrivilegeReport, TableReport, TableTriggerReport};
9-
use crate::compare::report::PropertyComparison::{PropertyChanged, PropertyUnchanged};
10-
use crate::compare::report::RoutineComparison::{RoutineAdded, RoutineMaintained, RoutineRemoved};
11-
use crate::compare::report::SchemaComparison::{SchemaAdded, SchemaMaintained, SchemaMissing, SchemaRemoved};
12-
use crate::compare::report::SequenceComparison::{SequenceAdded, SequenceMaintained, SequenceRemoved};
13-
use crate::compare::report::TableColumnComparison::{ColumnAdded, ColumnMaintained, ColumnRemoved};
14-
use crate::compare::report::TableComparison::{TableAdded, TableMaintained, TableRemoved};
15-
use crate::compare::report::TableConstraintComparison::{ConstraintAdded, ConstraintMaintained, ConstraintRemoved};
16-
use crate::compare::report::TableTriggerComparison::{TriggerAdded, TriggerMaintained, TriggerRemoved};
17-
use crate::compare::report::ViewComparison::{ViewMaintained};
9+
use crate::cli::args::{Args, Colouring::Always, Colouring::Never};
10+
use crate::compare::report::{HasChanges, Report};
11+
use crate::compare::report::privilege::PrivilegeComparison;
12+
use crate::compare::report::privilege::PrivilegeComparison::{PrivilegeAdded, PrivilegeMaintained, PrivilegeRemoved};
13+
use crate::compare::report::property::PropertyComparison;
14+
use crate::compare::report::property::PropertyComparison::{PropertyChanged, PropertyUnchanged};
15+
use crate::compare::report::routine::RoutineComparison;
16+
use crate::compare::report::routine::RoutineComparison::{RoutineAdded, RoutineMaintained, RoutineRemoved};
17+
use crate::compare::report::schema::SchemaComparison;
18+
use crate::compare::report::schema::SchemaComparison::{SchemaAdded, SchemaMaintained, SchemaMissing, SchemaRemoved};
19+
use crate::compare::report::sequence::SequenceComparison;
20+
use crate::compare::report::sequence::SequenceComparison::{SequenceAdded, SequenceMaintained, SequenceRemoved};
21+
use crate::compare::report::table::TableComparison;
22+
use crate::compare::report::table::TableComparison::{TableAdded, TableMaintained, TableRemoved};
23+
use crate::compare::report::table_column::TableColumnComparison;
24+
use crate::compare::report::table_column::TableColumnComparison::{ColumnAdded, ColumnMaintained, ColumnRemoved};
25+
use crate::compare::report::table_constraint::TableConstraintComparison;
26+
use crate::compare::report::table_constraint::TableConstraintComparison::{ConstraintAdded, ConstraintMaintained, ConstraintRemoved};
27+
use crate::compare::report::table_trigger::TableTriggerComparison::{TriggerAdded, TriggerMaintained, TriggerRemoved};
28+
use crate::compare::report::table_trigger::{TableTriggerComparison};
29+
use crate::compare::report::view::ViewComparison;
30+
use crate::compare::report::view::ViewComparison::ViewMaintained;
1831

1932
const COLOUR_ADDED: colored::Color = colored::Color::Green;
2033
const COLOUR_CHANGED: colored::Color= colored::Color::Yellow;
@@ -30,8 +43,8 @@ impl CLI {
3043
let args = Args::parse();
3144

3245
match args.color {
33-
Colouring::Always => colored::control::set_override(true),
34-
Colouring::Never => colored::control::set_override(false),
46+
Always => colored::control::set_override(true),
47+
Never => colored::control::set_override(false),
3548
_ => (),
3649
}
3750

@@ -57,7 +70,7 @@ impl CLI {
5770
process::exit(differences);
5871
}
5972

60-
fn render_schema_report(&self, report: SchemaReport) -> i32{
73+
fn render_schema_report(&self, report: Report<SchemaComparison>) -> i32{
6174
let mut differences = 0;
6275

6376
for schema in &report.entries {
@@ -104,7 +117,7 @@ impl CLI {
104117
differences
105118
}
106119

107-
fn render_property_report(&self, report: &PropertyReport, depth: usize) -> i32 {
120+
fn render_property_report(&self, report: &Report<PropertyComparison>, depth: usize) -> i32 {
108121
let mut differences = 0;
109122
let margin = str::repeat(" ", depth);
110123

@@ -127,7 +140,7 @@ impl CLI {
127140
differences
128141
}
129142

130-
fn render_privilege_report(&self, report: &PrivilegeReport, depth: usize) -> i32 {
143+
fn render_privilege_report(&self, report: &Report<PrivilegeComparison>, depth: usize) -> i32 {
131144
let mut differences = 0;
132145
let margin = str::repeat(" ", depth);
133146

@@ -156,7 +169,7 @@ impl CLI {
156169
differences
157170
}
158171

159-
fn render_routine_report(self: &Self, report: &RoutineReport) -> i32 {
172+
fn render_routine_report(&self, report: &Report<RoutineComparison>) -> i32 {
160173
let mut differences = 0;
161174

162175
for routine in &report.entries {
@@ -195,7 +208,7 @@ impl CLI {
195208
differences
196209
}
197210

198-
fn render_sequence_report(&self, report: &SequenceReport) -> i32 {
211+
fn render_sequence_report(&self, report: &Report<SequenceComparison>) -> i32 {
199212
let mut differences = 0;
200213

201214
for sequence in &report.entries {
@@ -232,7 +245,7 @@ impl CLI {
232245
differences
233246
}
234247

235-
fn render_table_report(&self, report: &TableReport) -> i32 {
248+
fn render_table_report(&self, report: &Report<TableComparison>) -> i32 {
236249
let mut differences = 0;
237250

238251
for table in &report.entries {
@@ -273,7 +286,7 @@ impl CLI {
273286
differences
274287
}
275288

276-
fn render_table_column_report(&self, report: &TableColumnReport) -> i32 {
289+
fn render_table_column_report(&self, report: &Report<TableColumnComparison>) -> i32 {
277290
let mut differences = 0;
278291

279292
for column in &report.entries {
@@ -311,7 +324,7 @@ impl CLI {
311324
differences
312325
}
313326

314-
fn render_table_constraint_report(&self, report: &TableConstraintReport) -> i32 {
327+
fn render_table_constraint_report(&self, report: &Report<TableConstraintComparison>) -> i32 {
315328
let mut differences = 0;
316329

317330
for constraint in &report.entries {
@@ -348,7 +361,7 @@ impl CLI {
348361
differences
349362
}
350363

351-
fn render_table_trigger_report(&self, report: &TableTriggerReport) -> i32 {
364+
fn render_table_trigger_report(&self, report: &Report<TableTriggerComparison>) -> i32 {
352365
let mut differences = 0;
353366

354367
for trigger in &report.entries {
@@ -385,7 +398,7 @@ impl CLI {
385398
differences
386399
}
387400

388-
fn render_view_report(&self, report: &ViewReport) -> i32 {
401+
fn render_view_report(&self, report: &Report<ViewComparison>) -> i32 {
389402
let mut differences = 0;
390403

391404
for view in &report.entries {
@@ -410,38 +423,3 @@ impl CLI {
410423
differences
411424
}
412425
}
413-
414-
#[derive(Parser, Debug)]
415-
#[command(version, about, long_about = None)]
416-
pub struct Args {
417-
#[arg(short, long, short = 'l', help = "The left database URL")]
418-
left: String,
419-
420-
#[arg(short, long, short = 'r', help = "The right database URL")]
421-
right: String,
422-
423-
#[arg(short, long, required = true, short = 's', help = "Schema to compare")]
424-
schema: Vec<String>,
425-
426-
#[arg(short, long, short = 'w', help = "Ignore routine whitespace differences")]
427-
ignore_whitespace: bool,
428-
429-
#[arg(short, long, short = 'o', help = "Ignore column ordering differences")]
430-
ignore_column_ordinal: bool,
431-
432-
#[arg(short, long, short = 'p', help = "Ignore privilege changes")]
433-
ignore_privileges: bool,
434-
435-
#[arg(short, long, short = 'v', help = "Show matches")]
436-
verbose: bool,
437-
438-
#[arg(short, long, short = 'c', alias = "colour", help = "Use colour", default_value = "auto")]
439-
color: Colouring,
440-
}
441-
442-
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug)]
443-
enum Colouring {
444-
Auto,
445-
Always,
446-
Never,
447-
}

0 commit comments

Comments
 (0)