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}