Skip to main content

SecNanosecMsg

Trait SecNanosecMsg 

Source
pub trait SecNanosecMsg: Sized {
    // Required method
    fn from_sec_nanosec(sec: i32, nanosec: u32) -> Self;
}
Expand description

A generated message whose field set is { sec: i32, nanosec: u32 } — builtin_interfaces/msg/Time and its Duration twin.

This is the Rust substitute for a C++ template parameter. nros-cpp spells the same conversion as template <typename TimeMsgT> void Time::to_msg(TimeMsgT&) (packages/api/nros-cpp/include/rclcpp/time.hpp), which binds structurally to anything carrying sec / nanosec. Rust has no structural bound, so the same trick needs an AUTHORED trait that rosidl-codegen implements for every generated message with that exact field set — the same binding set the C++ template has, decided by SHAPE rather than by a hard-coded package name.

Why the trait lives here and the impl does not: nros-core can never name a message type. Every generated message crate depends on nros-core, so a dependency the other way is a cycle, and message types are generated per USER package (RFC-0023 / RFC-0067) — there is no one crate for the client library to name. The trait is the seam that lets the conversion cross that edge without an edge.

Implemented by codegen; nothing in this crate implements it.

Required Methods§

Source

fn from_sec_nanosec(sec: i32, nanosec: u32) -> Self

Build the message from an already-decomposed timestamp.

Infallible by construction — both components are already the message’s own field types. See Time::to_ros_msg for why no Result appears here.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl SecNanosecMsg for Duration

Source§

impl SecNanosecMsg for Time

Source§

fn from_sec_nanosec(sec: i32, nanosec: u32) -> Time

Implementors§