}
#[derive(Debug,Serialize,Clone)]
-pub enum ErrorSignaledViaUpdate<POEPU: Debug> {
+pub enum ErrorSignaledViaUpdate<POEPU: Debug, EM: Debug> {
InternalError,
PlayerRemoved, // appears only in streams for applicable player
TokenRevoked, // appears only in streams for applicable player
PieceOpError {
error: Inapplicable,
+ error_msg: EM,
partially: PieceOpErrorPartiallyProcessed,
state: POEPU,
},
pub fn remove_clients(&mut self,
players: &HashSet<PlayerId>,
- signal: ErrorSignaledViaUpdate<PUE_P>) {
+ signal: ErrorSignaledViaUpdate<PUE_P, String>) {
let mut clients_to_remove = HashSet::new();
self.clients.retain(|k,v| {
let remove = players.contains(&v.player);
new_info_pane: Arc<Html>,
},
Log(Arc<CommittedLogEntry>),
- Error(ErrorSignaledViaUpdate<PUE_P>),
+ Error(ErrorSignaledViaUpdate<PUE_P, String>),
}
#[allow(non_camel_case_types)]
SetLinks(Html),
#[serde(serialize_with="serialize_logentry")]
Log(TransmitUpdateLogEntry<'u>),
- Error(ErrorSignaledViaUpdate<TUE_P<'u>>),
+ Error(ErrorSignaledViaUpdate<TUE_P<'u>, &'u str>),
}
type TransmitUpdateLogEntry<'u> = (&'u Timezone, &'u CommittedLogEntry);
}
)?;
let update = PUE::Error(ESVU::PieceOpError {
- error, state, partially
+ error, state, partially,
+ error_msg: error.to_string(),
});
buf.us.push(update);
buf.log_updates(logents);
pub fn for_transmit<'u>(&'u self, tz: &'u Timezone,
player: PlayerId, dest: ClientId)
-> TransmitUpdate<'u> {
- type ESVU<T> = ErrorSignaledViaUpdate<T>;
+ type ESVU<T,EM> = ErrorSignaledViaUpdate<T,EM>;
type PUE = PreparedUpdateEntry;
type TUE<'u> = TransmitUpdateEntry<'u>;
let mut ents = vec![];
ESVU::InternalError => TUE::Error(ESVU::InternalError),
ESVU::PlayerRemoved => TUE::Error(ESVU::PlayerRemoved),
ESVU::TokenRevoked => TUE::Error(ESVU::TokenRevoked),
- ESVU::PieceOpError { error, partially, ref state } => {
+ ESVU::PieceOpError { error, partially,
+ ref error_msg, ref state } => {
let c = state.by_client.as_ref().map(|(_,c,_)| *c);
if c == None || c == Some(dest) {
let state = match pue_piece_to_tue_p(state, player) {
None => continue,
};
TUE::Error(
- ESVU::PieceOpError { error, partially, state }
+ ESVU::PieceOpError { error, error_msg, partially, state }
)
} else {
match partially {