Tratamento de Erros do CXX

O suporte do CXX para Result<T,E> depende de exceções C++, portanto, não podemos usá-lo no Chromium. Alternativas:

  • A parte T de Result<T, E> pode ser:

    • Retornado via parâmetros de saída (por exemplo, via &mut T). Isso requer que T possa ser passado pela fronteira FFI - por exemplo, T tem que ser:
      • Um tipo primitivo (como u32 ou usize)
      • Um tipo suportado nativamente por cxx (como UniquePtr<T>) que tem um valor padrão adequado para usar em um caso de falha (ao contrário de Box<T>).
    • Mantido no lado Rust e exposto por referência. Isso pode ser necessário quando T é um tipo Rust, que não pode ser passado pela fronteira FFI e não pode ser armazenado em UniquePtr<T>.
  • A parte E de Result<T, E> pode ser:

    • Retornado como um booleano (por exemplo, true representando sucesso e false representando falha)
    • A preservação dos detalhes do erro é teoricamente possível, mas até agora não foi necessária na prática.