use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
use std::sync::Arc;
use uuid::Uuid;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RunnableConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, Value>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_concurrency: Option<usize>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub run_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub run_id: Option<Uuid>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub configurable: Option<HashMap<String, Value>>,
#[serde(skip)]
pub callbacks: Option<Vec<Arc<dyn CallbackHandlerDyn>>>,
#[cfg(feature = "tracing")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tracing_config: Option<crate::observability::TracingConfig>,
}
pub trait CallbackHandlerDyn: Send + Sync + std::fmt::Debug {}