You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.rs 1.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. use dora_node_api::{self, dora_core::config::DataId, DoraNode, Event, IntoArrow};
  2. use eyre::Context;
  3. fn main() -> eyre::Result<()> {
  4. println!("hello");
  5. let status_output = DataId::from("status".to_owned());
  6. let (mut node, mut events) = DoraNode::init_from_env()?;
  7. let mut ticks = 0;
  8. while let Some(event) = events.recv() {
  9. match event {
  10. Event::Input { id, metadata, data } => match id.as_ref() {
  11. "tick" => {
  12. ticks += 1;
  13. }
  14. "random" => {
  15. let value = u64::try_from(&data).context("unexpected data type")?;
  16. let output = format!(
  17. "operator received random value {value:#x} after {} ticks",
  18. ticks
  19. );
  20. node.send_output(
  21. status_output.clone(),
  22. metadata.parameters,
  23. output.into_arrow(),
  24. )?;
  25. }
  26. other => eprintln!("ignoring unexpected input {other}"),
  27. },
  28. Event::Stop => {}
  29. Event::InputClosed { id } => {
  30. println!("input `{id}` was closed");
  31. if *id == "random" {
  32. println!("`random` input was closed -> exiting");
  33. break;
  34. }
  35. }
  36. other => {
  37. println!("received unknown event {other:?}");
  38. }
  39. }
  40. }
  41. Ok(())
  42. }