///|
/// Parse attached or explicitly supplied detached data. No filesystem access.
pub fn read_nrrd(
  bytes : Bytes,
  detached? : Bytes,
  limits~ : Limits = Limits::default(),
) -> Tensor raise NrrdError {
  let h = parse_header(bytes, limits~)
  let payload = match (h.data_file, detached) {
    (None, None) => {
      if bytes.length() - h.payload_offset > limits.max_payload_bytes {
        raise Limit("encoded payload budget")
      }
      bytes[h.payload_offset:].to_owned()
    }
    (Some(_), Some(data)) => {
      if h.payload_offset != bytes.length() {
        raise Invalid("detached header has inline data")
      }
      if data.length() > limits.max_payload_bytes {
        raise Limit("detached payload budget")
      }
      data
    }
    (Some(_), None) =>
      raise Invalid("detached header requires explicit payload")
    (None, Some(_)) =>
      raise Invalid("attached header cannot accept detached payload")
  }
  let values = match h.encoding {
    Raw => decode_raw(payload, h.scalar, h.shape.count, h.endian, limits)
    Ascii => decode_ascii(payload, h.scalar, h.shape.count, limits)
    Hex => {
      let raw = decode_hex(
        payload,
        h.shape.byte_count(h.scalar, limits),
        limits,
      )
      decode_raw(raw, h.scalar, h.shape.count, h.endian, limits)
    }
  }
  Tensor::new(h.shape.axes, h.scalar, values, metadata=h.metadata, limits~)
}