Skip to content
Snippets Groups Projects
  • Nazar Mokrynskyi's avatar
    Remove `sp_runtime::RuntimeString` and replace with `Cow<'static, str>` or... · c5444f38
    Nazar Mokrynskyi authored
    Remove `sp_runtime::RuntimeString` and replace with `Cow<'static, str>` or `String` depending on use case (#5693)
    
    # Description
    
    As described in https://github.com/paritytech/polkadot-sdk/issues/4001
    `RuntimeVersion` was not encoded consistently using serde. Turned out it
    was a remnant of old times and no longer actually needed. As such I
    removed it completely in this PR and replaced with `Cow<'static, str>`
    for spec/impl names and `String` for error cases.
    
    Fixes https://github.com/paritytech/polkadot-sdk/issues/4001.
    
    ## Integration
    
    For downstream projects the upgrade will primarily consist of following
    two changes:
    ```diff
    #[sp_version::runtime_version]
    pub const VERSION: RuntimeVersion = RuntimeVersion {
    -	spec_name: create_runtime_str!("statemine"),
    -	impl_name: create_runtime_str!("statemine"),
    +	spec_name: alloc::borrow::Cow::Borrowed("statemine"),
    +	impl_name: alloc::borrow::Cow::Borrowed("statemine"),
    ```
    ```diff
    		fn dispatch_benchmark(
    			config: frame_benchmarking::BenchmarkConfig
    -		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
    +		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, alloc::string::String> {
    ```
    
    SCALE encoding/decoding remains the same as before, but serde encoding
    in runtime has changed from bytes to string (it was like this in `std`
    environment already), which most projects shouldn't have issues with. I
    consider the impact of serde encoding here low due to the type only
    being used in runtime version struct and mostly limited to runtime
    internals, where serde encoding/decoding of this data structure is quite
    unlikely (though we did hit exactly this edge-case ourselves
    :sweat_smile:
    
    ).
    
    ## Review Notes
    
    Most of the changes are trivial and mechanical, the only non-trivial
    change is in
    `substrate/primitives/version/proc-macro/src/decl_runtime_version.rs`
    where macro call expectation in `sp_version::runtime_version`
    implementation was replaced with function call expectation.
    
    # Checklist
    
    * [x] My PR includes a detailed description as outlined in the
    "Description" and its two subsections above.
    * [ ] My PR follows the [labeling requirements](
    
    https://github.com/paritytech/polkadot-sdk/blob/master/docs/contributor/CONTRIBUTING.md#Process
    ) of this project (at minimum one label for `T` required)
    * External contributors: ask maintainers to put the right label on your
    PR.
    * [ ] I have made corresponding changes to the documentation (if
    applicable)
    
    ---------
    
    Co-authored-by: default avatarGitHub Action <action@github.com>
    Co-authored-by: default avatarGuillaume Thiolliere <guillaume.thiolliere@parity.io>
    Co-authored-by: default avatarBastian Köcher <info@kchr.de>
    Unverified
    c5444f38
Code owners
Assign users and groups as approvers for specific file changes. Learn more.