Different XCM builders, default one requires fee payment (#2253)

Adding on top of the new builder pattern for creating XCM programs, I'm
adding some more APIs:

```rust
let paying_fees: Xcm<()> = Xcm::builder() // Only allow paying for fees
  .withdraw_asset() // First instruction has to load the holding register
  .buy_execution() // Second instruction has to be `buy_execution`
  .build();

let paying_fees_invalid: Xcm<()> = Xcm::builder()
  .withdraw_asset()
  .build(); // Invalid, need to pay for fees

let not_paying_fees: Xcm<()> = Xcm::builder_unpaid()
  .unpaid_execution() // Needed
  .withdraw_asset()
  .deposit_asset()
  .build();

let all_goes: Xcm<()> = Xcm::builder_unsafe() // You can do anything
  .withdraw_asset()
  .deposit_asset()
  .build();
```

The invalid bits are because the methods don't even exist on the types
that you'd want to call them on.

---------

Co-authored-by: command-bot <>
This commit is contained in:
Francisco Aguirre
2023-11-21 16:09:40 +01:00
committed by GitHub
parent b25d29a502
commit b3841b6b71
25 changed files with 625 additions and 54 deletions
@@ -0,0 +1,5 @@
error: Expected the `Instruction` enum
--> tests/ui/builder_pattern/wrong_target.rs:23:1
|
23 | struct SomeStruct;
| ^^^^^^^^^^^^^^^^^^