diff --git a/bdk-ffi/src/bdk.udl b/bdk-ffi/src/bdk.udl index 5edb5c87..793ea4cf 100644 --- a/bdk-ffi/src/bdk.udl +++ b/bdk-ffi/src/bdk.udl @@ -4,263 +4,6 @@ namespace bdk {}; // bdk crate - error module // ------------------------------------------------------------------------ -[Error] -interface AddressParseError { - Base58(); - Bech32(); - WitnessVersion(string error_message); - WitnessProgram(string error_message); - UnknownHrp(); - LegacyAddressTooLong(); - InvalidBase58PayloadLength(); - InvalidLegacyPrefix(); - NetworkValidation(); - OtherAddressParseErr(); -}; - -[Error] -interface Bip32Error { - CannotDeriveFromHardenedKey(); - Secp256k1(string error_message); - InvalidChildNumber(u32 child_number); - InvalidChildNumberFormat(); - InvalidDerivationPathFormat(); - UnknownVersion(string version); - WrongExtendedKeyLength(u32 length); - Base58(string error_message); - Hex(string error_message); - InvalidPublicKeyHexLength(u32 length); - UnknownError(string error_message); -}; - -[Error] -interface Bip39Error { - BadWordCount(u64 word_count); - UnknownWord(u64 index); - BadEntropyBitCount(u64 bit_count); - InvalidChecksum(); - AmbiguousLanguages(string languages); -}; - -[Error] -interface CreateTxError { - Descriptor(string error_message); - Policy(string error_message); - SpendingPolicyRequired(string kind); - Version0(); - Version1Csv(); - LockTime(string requested, string required); - RbfSequenceCsv(string sequence, string csv); - FeeTooLow(string required); - FeeRateTooLow(string required); - NoUtxosSelected(); - OutputBelowDustLimit(u64 index); - ChangePolicyDescriptor(); - CoinSelection(string error_message); - InsufficientFunds(u64 needed, u64 available); - NoRecipients(); - Psbt(string error_message); - MissingKeyOrigin(string key); - UnknownUtxo(string outpoint); - MissingNonWitnessUtxo(string outpoint); - MiniscriptPsbt(string error_message); - PushBytesError(); - LockTimeConversionError(); -}; - -[Error] -interface DescriptorError { - InvalidHdKeyPath(); - InvalidDescriptorChecksum(); - HardenedDerivationXpub(); - MultiPath(); - Key(string error_message); - Policy(string error_message); - InvalidDescriptorCharacter(string char); - Bip32(string error_message); - Base58(string error_message); - Pk(string error_message); - Miniscript(string error_message); - Hex(string error_message); - ExternalAndInternalAreTheSame(); -}; - -[Error] -interface DescriptorKeyError { - Parse(string error_message); - InvalidKeyType(); - Bip32(string error_message); -}; - -[Error] -interface ElectrumError { - IOError(string error_message); - Json(string error_message); - Hex(string error_message); - Protocol(string error_message); - Bitcoin(string error_message); - AlreadySubscribed(); - NotSubscribed(); - InvalidResponse(string error_message); - Message(string error_message); - InvalidDNSNameError(string domain); - MissingDomain(); - AllAttemptsErrored(); - SharedIOError(string error_message); - CouldntLockReader(); - Mpsc(); - CouldNotCreateConnection(string error_message); - RequestAlreadyConsumed(); -}; - -[Error] -interface EsploraError { - Minreq(string error_message); - HttpResponse(u16 status, string error_message); - Parsing(string error_message); - StatusCode(string error_message); - BitcoinEncoding(string error_message); - HexToArray(string error_message); - HexToBytes(string error_message); - TransactionNotFound(); - HeaderHeightNotFound(u32 height); - HeaderHashNotFound(); - InvalidHttpHeaderName(string name); - InvalidHttpHeaderValue(string value); - RequestAlreadyConsumed(); - InvalidResponse(); -}; - -[Error] -interface FeeRateError { - ArithmeticOverflow(); -}; - -[Error] -interface FromScriptError { - UnrecognizedScript(); - WitnessProgram(string error_message); - WitnessVersion(string error_message); - OtherFromScriptErr(); -}; - -[Error] -interface MiniscriptError { - AbsoluteLockTime(); - AddrError(string error_message); - AddrP2shError(string error_message); - AnalysisError(string error_message); - AtOutsideOr(); - BadDescriptor(string error_message); - BareDescriptorAddr(); - CmsTooManyKeys(u32 keys); - ContextError(string error_message); - CouldNotSatisfy(); - ExpectedChar(string char); - ImpossibleSatisfaction(); - InvalidOpcode(); - InvalidPush(); - LiftError(string error_message); - MaxRecursiveDepthExceeded(); - MissingSig(); - MultiATooManyKeys(u64 keys); - MultiColon(); - MultipathDescLenMismatch(); - NonMinimalVerify(string error_message); - NonStandardBareScript(); - NonTopLevel(string error_message); - ParseThreshold(); - PolicyError(string error_message); - PubKeyCtxError(); - RelativeLockTime(); - Script(string error_message); - Secp(string error_message); - Threshold(); - TrNoScriptCode(); - Trailing(string error_message); - TypeCheck(string error_message); - Unexpected(string error_message); - UnexpectedStart(); - UnknownWrapper(string char); - Unprintable(u8 byte); -}; - -[Error] -interface ParseAmountError { - OutOfRange(); - TooPrecise(); - MissingDigits(); - InputTooLarge(); - InvalidCharacter(string error_message); - OtherParseAmountErr(); -}; - -[Error] -interface PersistenceError { - Reason(string error_message); -}; - -[Error] -interface PsbtError { - InvalidMagic(); - MissingUtxo(); - InvalidSeparator(); - PsbtUtxoOutOfBounds(); - InvalidKey(string key); - InvalidProprietaryKey(); - DuplicateKey(string key); - UnsignedTxHasScriptSigs(); - UnsignedTxHasScriptWitnesses(); - MustHaveUnsignedTx(); - NoMorePairs(); - UnexpectedUnsignedTx(); - NonStandardSighashType(u32 sighash); - InvalidHash(string hash); - InvalidPreimageHashPair(); - CombineInconsistentKeySources(string xpub); - ConsensusEncoding(string encoding_error); - NegativeFee(); - FeeOverflow(); - InvalidPublicKey(string error_message); - InvalidSecp256k1PublicKey(string secp256k1_error); - InvalidXOnlyPublicKey(); - InvalidEcdsaSignature(string error_message); - InvalidTaprootSignature(string error_message); - InvalidControlBlock(); - InvalidLeafVersion(); - Taproot(); - TapTree(string error_message); - XPubKey(); - Version(string error_message); - PartialDataConsumption(); - Io(string error_message); - OtherPsbtErr(); -}; - -[Error] -interface PsbtParseError { - PsbtEncoding(string error_message); - Base64Encoding(string error_message); -}; - -[Error] -interface PsbtFinalizeError { - InputError(string reason, u32 index); - WrongInputCount(u32 in_tx, u32 in_map); - InputIdxOutofBounds(u32 psbt_inp, u32 requested); -}; - -[Error] -interface TransactionError { - Io(); - OversizedVectorAllocation(); - InvalidChecksum(string expected, string actual); - NonMinimalVarInt(); - ParseFailed(); - UnsupportedSegwitFlag(u8 flag); - OtherTransactionErr(); -}; - // ------------------------------------------------------------------------ // bdk_wallet crate - types module // ------------------------------------------------------------------------ diff --git a/bdk-ffi/src/error.rs b/bdk-ffi/src/error.rs index 649e5d43..c02f16ce 100644 --- a/bdk-ffi/src/error.rs +++ b/bdk-ffi/src/error.rs @@ -33,7 +33,7 @@ use std::convert::TryInto; // error definitions // ------------------------------------------------------------------------ -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum AddressParseError { #[error("base58 address encoding error")] Base58, @@ -67,7 +67,7 @@ pub enum AddressParseError { OtherAddressParseErr, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum Bip32Error { #[error("cannot derive from a hardened key")] CannotDeriveFromHardenedKey, @@ -103,7 +103,7 @@ pub enum Bip32Error { UnknownError { error_message: String }, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum Bip39Error { #[error("the word count {word_count} is not supported")] BadWordCount { word_count: u64 }, @@ -136,7 +136,7 @@ pub enum CannotConnectError { Include { height: u32 }, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum CreateTxError { #[error("descriptor error: {error_message}")] Descriptor { error_message: String }, @@ -217,7 +217,7 @@ pub enum CreateWithPersistError { Descriptor { error_message: String }, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum DescriptorError { #[error("invalid hd key path")] InvalidHdKeyPath, @@ -259,7 +259,7 @@ pub enum DescriptorError { ExternalAndInternalAreTheSame, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum DescriptorKeyError { #[error("error parsing descriptor key: {error_message}")] Parse { error_message: String }, @@ -271,7 +271,7 @@ pub enum DescriptorKeyError { Bip32 { error_message: String }, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum ElectrumError { #[error("{error_message}")] IOError { error_message: String }, @@ -325,7 +325,7 @@ pub enum ElectrumError { RequestAlreadyConsumed, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum EsploraError { #[error("minreq error: {error_message}")] Minreq { error_message: String }, @@ -386,13 +386,13 @@ pub enum ExtractTxError { )] OtherExtractTxErr, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum FeeRateError { - #[error("arithmetic overflow on feerate")] + #[error("arithmetic overflow")] ArithmeticOverflow, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum FromScriptError { #[error("script is not a p2pkh, p2sh or witness program")] UnrecognizedScript, @@ -426,7 +426,7 @@ pub enum LoadWithPersistError { CouldNotLoad, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum MiniscriptError { #[error("absolute locktime error")] AbsoluteLockTime, @@ -540,7 +540,7 @@ pub enum MiniscriptError { Unprintable { byte: u8 }, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum ParseAmountError { #[error("amount out of range")] OutOfRange, @@ -562,13 +562,13 @@ pub enum ParseAmountError { OtherParseAmountErr, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum PersistenceError { #[error("persistence error: {error_message}")] Reason { error_message: String }, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum PsbtError { #[error("invalid magic")] InvalidMagic, @@ -672,7 +672,7 @@ pub enum PsbtError { OtherPsbtErr, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum PsbtParseError { #[error("error in internal psbt data structure: {error_message}")] PsbtEncoding { error_message: String }, @@ -681,7 +681,7 @@ pub enum PsbtParseError { Base64Encoding { error_message: String }, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum PsbtFinalizeError { #[error("an input at index {index} is invalid: {reason}")] InputError { reason: String, index: u32 }, @@ -745,7 +745,7 @@ pub enum SignerError { Psbt { error_message: String }, } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, uniffi::Error)] pub enum TransactionError { #[error("io error")] Io, diff --git a/bdk-ffi/src/lib.rs b/bdk-ffi/src/lib.rs index 3597fc9c..e92bd4db 100644 --- a/bdk-ffi/src/lib.rs +++ b/bdk-ffi/src/lib.rs @@ -13,23 +13,6 @@ mod wallet; use crate::bitcoin::FeeRate; use crate::bitcoin::OutPoint; -use crate::error::AddressParseError; -use crate::error::Bip32Error; -use crate::error::Bip39Error; -use crate::error::CreateTxError; -use crate::error::DescriptorError; -use crate::error::DescriptorKeyError; -use crate::error::ElectrumError; -use crate::error::EsploraError; -use crate::error::FeeRateError; -use crate::error::FromScriptError; -use crate::error::MiniscriptError; -use crate::error::ParseAmountError; -use crate::error::PersistenceError; -use crate::error::PsbtError; -use crate::error::PsbtFinalizeError; -use crate::error::PsbtParseError; -use crate::error::TransactionError; use bdk_wallet::bitcoin::Network;