```rust use std::convert::Infallible; use embedded_hal::digital::{ErrorType, InputPin, OutputPin}; struct MyDriver { pin1: O, pin2: IO, } impl MyDriver { fn new_two_pins(pin1: O, pin2: IO) -> Self { Self { pin1, pin2 } } } impl MyDriver { fn new_one_pin(pin1: O) -> Self { Self { pin1, pin2: NoIoPin, } } } struct NoIoPin; impl ErrorType for NoIoPin { type Error = Infallible; } impl InputPin for NoIoPin { fn is_high(&mut self) -> Result { todo!() } fn is_low(&mut self) -> Result { todo!() } } impl OutputPin for NoIoPin { fn set_high(&mut self) -> Result<(), Self::Error> { todo!() } fn set_low(&mut self) -> Result<(), Self::Error> { todo!() } }