make MessageReader a concrete struct