parity_scale_codec/decode_finished.rs
1// Copyright (C) Parity Technologies (UK) Ltd.
2// SPDX-License-Identifier: Apache-2.0
3
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16//! Contains the [`DecodeFinished`] type, sequestered into its own module
17//! to prevent its direct construction in the whole crate.
18
19use core::marker::PhantomData;
20
21/// A zero-sized type signifying that the decoding finished.
22///
23/// To be used in [`Decode::decode_into`] to allow the implementation to explicitly
24/// assert that the `MaybeUninit` passed into that function was properly initialized.
25pub struct DecodeFinished(PhantomData<*const ()>);
26
27impl DecodeFinished {
28 /// Assert that the decoding has finished.
29 ///
30 /// # Safety
31 ///
32 /// Should be used in [`Decode::decode_into`] to signify that
33 /// the `MaybeUninit` passed into that function was properly initialized.
34 #[inline]
35 pub unsafe fn assert_decoding_finished() -> DecodeFinished {
36 DecodeFinished(PhantomData)
37 }
38}