1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
// Copyright (c) 2023 Contributors to the Eclipse Foundation
//
// See the NOTICE file(s) distributed with this work for additional
// information regarding copyright ownership.
//
// This program and the accompanying materials are made available under the
// terms of the Apache Software License 2.0 which is available at
// https://www.apache.org/licenses/LICENSE-2.0, or the MIT license
// which is available at https://opensource.org/licenses/MIT.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT
//! The [`CreationMode`] describes how certain posix resources should be created.
use iceoryx2_pal_posix::*;
use std::fmt::Display;
/// Describes how new resources like [`crate::file::File`], [`crate::shared_memory::SharedMemory`]
/// or others should be created.
#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq, Default)]
pub enum CreationMode {
/// Create resource, if its already existing fail.
#[default]
CreateExclusive,
/// Always remove existing resource and override it with new one
PurgeAndCreate,
/// Either open the new resource or create it when it is not existing
OpenOrCreate,
}
impl CreationMode {
pub fn as_oflag(&self) -> posix::int {
match self {
CreationMode::PurgeAndCreate => posix::O_CREAT | posix::O_EXCL,
CreationMode::CreateExclusive => posix::O_CREAT | posix::O_EXCL,
CreationMode::OpenOrCreate => posix::O_CREAT,
}
}
}
impl Display for CreationMode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"CreationMode: {}",
match self {
CreationMode::CreateExclusive => "CreateExclusive",
CreationMode::PurgeAndCreate => "PurgeAndCreate",
CreationMode::OpenOrCreate => "OpenOrCreate",
}
)
}
}