Using a different serialization method for a particular feild based on some condition

Hi,

I am working on library. It was encoding an object

pub struct obj {
    pub appliance_id: u32,
    pub last: bool,
    pub path: PathBuf,
}

And, previously the encoding for invalid utf-8 was not handled. So, I have written a separate method to serialize path

pub fn serialize<S>(p: &Arc<PathBuf>, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        let b = p.as_os_str().as_bytes();
        serializer.serialize_bytes(b)
    }

What I want is that if the path is valid utf-8 than it should serilize with default serialiser for pathbuf, which is by converting it to str and than serialize it. And, In case of invalid utf-8 it should fallback to the new method written for serialize path.
And same should work for deserializer.

Thanks in Advance!