use prost_dto::{FromProst, IntoProst};

mod sub {
    pub struct RunAt {
        pub run_at: Vec<String>,
    }
    pub struct Cron {
        pub pattern: String,
    }
    pub mod schedule {
        pub enum Schedule {
            Cron(super::Cron),
            RunAt(super::RunAt),
        }
    }
    pub struct Schedule {
        pub schedule: Option<schedule::Schedule>,
    }
}

#[derive(Debug, IntoProst, FromProst)]
#[prost(target = "sub::Cron")]
pub struct Cron {
    pub pattern: String,
}

#[derive(Debug, IntoProst, FromProst)]
#[prost(target = "sub::RunAt")]
pub struct RunAt {
    #[prost(name = "run_at")]
    pub timepoints: Vec<String>,
}

#[derive(Debug, IntoProst, FromProst)]
#[prost(target = "sub::Schedule", oneof = "schedule")]
pub enum Schedule {
    #[prost(name = "Cron")]
    Recurring(Cron),
    RunAt(RunAt),
}

fn main() {}