1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use prost::{DecodeError, Message};
use prost_types::Any;

#[derive(Debug)]
pub enum AnyUnpackError {
    InvalidTypeUrl,
    DecodeError(DecodeError),
}

impl From<DecodeError> for AnyUnpackError {
    fn from(value: DecodeError) -> Self {
        Self::DecodeError(value)
    }
}

pub type AnyMessage = Box<dyn ::prost::Message>;

pub fn unpack_any(any: &Any) -> Result<AnyMessage, AnyUnpackError> {
    let (type_url, value) = (&any.type_url, &any.value);
    match DECODE_MAP.get(type_url).map(move |func| func(value)) {
        None => Err(AnyUnpackError::InvalidTypeUrl),
        Some(r) => r.map_err(|e| AnyUnpackError::DecodeError(e)),
    }
}

include!(concat!(env!("OUT_DIR"), "/_include.rs"));

#[doc(inline)]
pub use com::ankama::dofus::server::connection::protocol as connection;
#[doc(inline)]
pub use com::ankama::dofus::server::game::protocol as game;