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::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() {
println!("Hello, world!");
if false {
let mut session = Session::open_url("amqps://grahamc:cCbKQmwnRcd8kvPW9cjmMSkp@events.nix.gsc.io//").unwrap();
let mut channel = session.open_channel(1).unwrap();
let mut session = Session::open_url("amqps://grahamc:cCbKQmwnRcd8kvPW9cjmMSkp@events.nix.gsc.io//").unwrap();
let mut channel = session.open_channel(1).unwrap();
//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()) {
println!("Failed to declare a queue: {:?}", problem);
process::exit(1);
}
//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()) {
println!("Failed to declare a queue: {:?}", problem);
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(
worker::new(BuildWorker{
cloner: cloner
}),
"my_queue_name",
"lmao1",
false,
false,
false,
false,
Table::new()
);
channel.basic_consume(
worker::new(BuildWorker{
cloner: cloner
}),
"my_queue_name",
"lmao1",
false,
false,
false,
false,
Table::new()
);
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()) {
println!("Failed to publish: {:?}", result);
process::exit(1);
}
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()) {
println!("Failed to publish: {:?}", result);
process::exit(1);
}
}
@ -55,7 +60,7 @@ struct 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 co = project.clone_for("builder".to_string(),
job.pr.number.to_string())?;

View file

@ -19,18 +19,11 @@ pub struct StdPr {
pub head_sha: String,
}
pub struct BuildJob {
pub repo: StdRepo,
pub pr: StdPr,
}
pub struct Actions {
}
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> {