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
103
104
105
use clap::{Arg, Command};

/// The CLI application
pub fn cli() -> Command<'static> {
    Command::new("swift-bridge")
        .about("facilitates Rust and Swift interop.")
        .version(env!("CARGO_PKG_VERSION"))
        .subcommand_required(true)
        .subcommand(
            create_package_command(),
        )
}

/// The command for creating a Swift Package
fn create_package_command() -> Command<'static> {
    Command::new("create-package")
        .about("Create a Swift Package from Rust code.")
        .arg(
            Arg::new("bridges-dir")
                .long("bridges-dir")
                .takes_value(true)
                .value_name("PATH")
                .required(true)
                .help("The path to the generated bridge files"),
        )
        .arg(
            Arg::new("ios")
                .long("ios")
                .takes_value(true)
                .value_name("PATH")
                .help("The path to the compiled Rust library for iOS"),
        )
        .arg(
            Arg::new("simulator")
                .long("simulator")
                .takes_value(true)
                .value_name("PATH")
                .help("The path to the compiled Rust library for the iOS Simulator"),
        )
        .arg(
            Arg::new("macos")
                .long("macos")
                .takes_value(true)
                .value_name("PATH")
                .help("The path to the compiled Rust library for MacOS"),
        )
        .arg(
            Arg::new("mac-catalyst")
                .long("mac-catalyst")
                .takes_value(true)
                .value_name("PATH")
                .help("The path to the compiled Rust library for MacCatalyst"),
        )
        .arg(
            Arg::new("tvos")
                .long("tvos")
                .takes_value(true)
                .value_name("PATH")
                .help("The path to the compiled Rust library for tvOS"),
        )
        .arg(
            Arg::new("watchos")
                .long("watchos")
                .takes_value(true)
                .value_name("PATH")
                .help("The path to the compiled Rust library for WatchOS"),
        )
        .arg(
            Arg::new("watchos-simulator")
                .long("watchos-simulator")
                .takes_value(true)
                .value_name("PATH")
                .help("The path to the compiled Rust library for WatchOSSimulator"),
        )
        .arg(
            Arg::new("carplay")
                .long("carplay")
                .takes_value(true)
                .value_name("PATH")
                .help("The path to the compiled Rust library for AppleCarplay"),
        )
        .arg(
            Arg::new("carplay-simulator")
                .long("carplay-simulator")
                .takes_value(true)
                .value_name("PATH")
                .help("The path to the compiled Rust library for AppleCarplaySimulator"),
        )
        .arg(
            Arg::new("out-dir")
                .long("out-dir")
                .takes_value(true)
                .value_name("PATH")
                .required(true)
                .help("The path of the Swift Package"),
        )
        .arg(
            Arg::new("name")
                .long("name")
                .takes_value(true)
                .value_name("PATH")
                .required(true)
                .help("The name for the Swift Package"),
        )
}