use qnect::create;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Qnect: OpenQASM Export Demo ===\n");
let mut q = create().with_qubits(3).build()?.with_recording();
println!("Building quantum circuit...\n");
q.h(0).await?;
q.cnot(0, 1).await?;
q.cnot(1, 2).await?;
q.s(0).await?;
q.t(1).await?;
q.rx(2, std::f64::consts::PI / 4.0).await?;
q.ry(0, std::f64::consts::PI / 2.0).await?;
q.measure(0).await?;
q.measure(1).await?;
q.measure(2).await?;
println!("Circuit visualization:");
q.print_circuit();
println!("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!("OpenQASM 3.0 Export:");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!("{}", q.to_qasm());
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!("OpenQASM 2.0 Export (for older tools):");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!("{}", q.to_qasm2());
std::fs::write("circuit.qasm", q.to_qasm())?;
println!("Circuit saved to circuit.qasm");
Ok(())
}