¿Cuál es la sintaxis para que coincida en una referencia a una enumeración?

Parece que todos los documentos introductorios de Rust'stipos de enumeración explica cómopartido en un objeto enum quepropio, pero ¿qué sucede si no posee el objeto enum y solo tiene una referencia con la que desea comparar? No sé cuál sería la sintaxis.

Aquí hay un código donde intento hacer coincidir una referencia a una enumeración:

use std::fmt;
use std::io::prelude::*;

pub enum Animal {
    Cat(String),
    Dog,
}

impl fmt::Display for Animal {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
            Animal::Cat(c) => f.write_str("c"),
            Animal::Dog => f.write_str("d"),
        }
    }
}

fn main() {
    let p: Animal = Animal::Cat("whiskers".to_owned());
    println!("{}", p);
}

losPatio de óxido da errores en los dos primeros casos del partido cuando intenta compilarlo:

error[E0308]: mismatched types
  --> src/main.rs:12:13
   |
12 |             Animal::Cat(c) => f.write_str("c"),
   |             ^^^^^^^^^^^^^^ expected &Animal, found enum `Animal`
   |
   = note: expected type `&Animal`
   = note:    found type `Animal`

error[E0308]: mismatched types
  --> src/main.rs:13:13
   |
13 |             Animal::Dog => f.write_str("d"),
   |             ^^^^^^^^^^^ expected &Animal, found enum `Animal`
   |
   = note: expected type `&Animal`
   = note:    found type `Animal`

¿Cómo puedo cambiar ese código para que se compile? Intenté agregar símbolos en muchos lugares diferentes sin suerte. ¿Es posible hacer coincidir una referencia a una enumeración?

Respuestas a la pregunta(3)

Su respuesta a la pregunta