Introduction
I currently have subcommands working using structopt, similarly to this other answer. However I would like to have nested subcommands similarly of how docker works:
docker image ls
docker image pull
Current Code
main.rs
mod cli;
use structopt::StructOpt;
use crate::cli::{Opt, Command};
fn main() {
    let opt = Opt::from_args();
    match opt.cmd {
        Command::Subcommand { .. } => {
            // Do something
        }
    }
}
cli/mod.rs
use structopt::StructOpt;
#[derive(StructOpt, Debug)]
pub enum Command {
    Subcommand {
       // args
    }
}
#[derive(StructOpt, Debug)]
pub struct Opt {
    #[structopt(subcommand)]
    pub cmd: Command,
}
What I have tried
Added another struct: main.rs
mod cli;
use structopt::StructOpt;
use crate::cli::{Opt, Resource};
fn main() {
    let opt = Opt::from_args();
    match opt.resource {
        Resource::Command { .. } => {
            // do something
        }
    }
}
cli/mod.rs
use structopt::StructOpt;
#[derive(StructOpt, Debug)]
pub enum Command {
    Subcommand {
        // args
    }
}
#[derive(StructOpt, Debug)]
pub struct Resource {
    #[structopt(subcommand)]
    image: Image
}
#[derive(StructOpt, Debug)]
pub struct Opt {
    #[structopt(subcommand)]
    pub resource: Resource,
}
However I get the following error:
help: use fully-qualified syntax: `<Resource as Trait>::ImageCommand