try to do a type thing

This commit is contained in:
Graham Christensen 2017-11-06 12:55:37 -05:00
parent f7377c1584
commit d559383737
No known key found for this signature in database
GPG key ID: ACA1C1D120C83D5C
2 changed files with 34 additions and 36 deletions

View file

@ -11,42 +11,47 @@ use std::io::Error;
use ofborg::checkout; use ofborg::checkout;
use ofborg::worker; use ofborg::worker;
use ofborg::worker::{Actions,StdPr,StdRepo,BuildJob}; use ofborg::worker::{Actions,StdPr,StdRepo};
pub struct BuildJob {
pub repo: StdRepo,
pub pr: StdPr,
}
fn main() { fn main() {
println!("Hello, world!"); println!("Hello, world!");
if false { let mut session = Session::open_url("amqps://grahamc:cCbKQmwnRcd8kvPW9cjmMSkp@events.nix.gsc.io//").unwrap();
let mut session = Session::open_url("amqps://grahamc:cCbKQmwnRcd8kvPW9cjmMSkp@events.nix.gsc.io//").unwrap(); let mut channel = session.open_channel(1).unwrap();
let mut channel = session.open_channel(1).unwrap();
//queue: &str, passive: bool, durable: bool, exclusive: bool, auto_delete: bool, nowait: bool, arguments: Table //queue: &str, passive: bool, durable: bool, exclusive: bool, auto_delete: bool, nowait: bool, arguments: Table
if let Err(problem) = channel.queue_declare("my_queue_name", false, true, false, false, false, Table::new()) { if let Err(problem) = channel.queue_declare("my_queue_name", false, true, false, false, false, Table::new()) {
println!("Failed to declare a queue: {:?}", problem); println!("Failed to declare a queue: {:?}", problem);
process::exit(1); process::exit(1);
} }
let cloner = checkout::cached_cloner(Path::new("/home/grahamc/.nix-test-rs")); let cloner = checkout::cached_cloner(Path::new("/home/grahamc/.nix-test-rs"));
channel.basic_consume( channel.basic_consume(
worker::new(BuildWorker{ worker::new(BuildWorker{
cloner: cloner cloner: cloner
}), }),
"my_queue_name", "my_queue_name",
"lmao1", "lmao1",
false, false,
false, false,
false, false,
false, false,
Table::new() Table::new()
); );
if let Err(result) = channel.basic_publish("", "my_queue_name", true, false, if let Err(result) = channel.basic_publish("", "my_queue_name", true, false,
protocol::basic::BasicProperties{ content_type: Some("text".to_string()), ..Default::default()}, (b"Hello from rust!").to_vec()) { protocol::basic::BasicProperties{ content_type: Some("text".to_string()), ..Default::default()}, (b"Hello from rust!").to_vec()) {
println!("Failed to publish: {:?}", result); println!("Failed to publish: {:?}", result);
process::exit(1); process::exit(1);
}
} }
} }
@ -55,7 +60,7 @@ struct BuildWorker {
} }
impl worker::SimpleWorker for BuildWorker { impl worker::SimpleWorker for BuildWorker {
fn consumer(&self, job: BuildJob, resp: Actions) -> Result<(), Error> { fn consumer<BuildJob>(&self, job: BuildJob, resp: Actions) -> Result<(), Error> {
let project = self.cloner.project(job.repo.full_name, job.repo.clone_url); let project = self.cloner.project(job.repo.full_name, job.repo.clone_url);
let co = project.clone_for("builder".to_string(), let co = project.clone_for("builder".to_string(),
job.pr.number.to_string())?; job.pr.number.to_string())?;

View file

@ -19,18 +19,11 @@ pub struct StdPr {
pub head_sha: String, pub head_sha: String,
} }
pub struct BuildJob {
pub repo: StdRepo,
pub pr: StdPr,
}
pub struct Actions { pub struct Actions {
} }
pub trait SimpleWorker { pub trait SimpleWorker {
fn consumer(&self, job: BuildJob, resp: Actions) -> Result<(), Error>; fn consumer<J>(&self, job: J, resp: Actions) -> Result<(), Error>;
} }
pub fn new<T: SimpleWorker>(worker: T) -> Worker<T> { pub fn new<T: SimpleWorker>(worker: T) -> Worker<T> {