blob: 050632f22bc5e095e3ec1251d09489647038dac9 [file]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//! GraphAr info version bindings.
use crate::ffi;
use cxx::SharedPtr;
/// A GraphAr info version.
///
/// This is a thin wrapper around `std::shared_ptr<const graphar::InfoVersion>`.
#[derive(Clone)]
pub struct InfoVersion(pub(crate) SharedPtr<ffi::graphar::ConstInfoVersion>);
impl InfoVersion {
/// Create a new `InfoVersion` by version number.
///
/// TODO: upstream C++ constructor takes `int`; prefer fixed-width integer types.
pub fn new(version: i32) -> crate::Result<Self> {
Ok(Self(ffi::graphar::new_const_info_version(version)?))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_info_version_new_ok_and_err() {
let v1 = InfoVersion::new(1).unwrap();
let _v1_clone = v1.clone();
// Use an obviously invalid version to keep this test future-proof.
// Upstream may add support for version 2.
let err = InfoVersion::new(-1).err().unwrap();
let msg = err.to_string();
assert!(!msg.is_empty(), "unexpected empty error message");
}
}