pub trait Add<Rhs = Self> {
type Output;
// Required method
fn add(self, rhs: Rhs) -> Self::Output;
}Expand description
The addition operator +.
Note that Rhs is Self by default, but this is not mandatory. For
example, std::time::SystemTime implements Add<Duration>, which permits
operations of the form SystemTime = SystemTime + Duration.
§Examples
§Addable points
use std::ops::Add;
#[derive(Debug, Copy, Clone, PartialEq)]
struct Point {
x: i32,
y: i32,
}
impl Add for Point {
type Output = Self;
fn add(self, other: Self) -> Self {
Self {
x: self.x + other.x,
y: self.y + other.y,
}
}
}
assert_eq!(Point { x: 1, y: 0 } + Point { x: 2, y: 3 },
Point { x: 3, y: 3 });§Implementing Add with generics
Here is an example of the same Point struct implementing the Add trait
using generics.
use std::ops::Add;
#[derive(Debug, Copy, Clone, PartialEq)]
struct Point<T> {
x: T,
y: T,
}
// Notice that the implementation uses the associated type `Output`.
impl<T: Add<Output = T>> Add for Point<T> {
type Output = Self;
fn add(self, other: Self) -> Self::Output {
Self {
x: self.x + other.x,
y: self.y + other.y,
}
}
}
assert_eq!(Point { x: 1, y: 0 } + Point { x: 2, y: 3 },
Point { x: 3, y: 3 });Required Associated Types§
Required Methods§
Implementors§
§impl Add for SerialNumber
Serial Number Addition, see RFC 1982, section 3.1
impl Add for SerialNumber
Serial Number Addition, see RFC 1982, section 3.1
The result is a wrapping add.
type Output = SerialNumber
1.74.0 (const: unstable) · Source§impl Add for Saturating<i128>
impl Add for Saturating<i128>
type Output = Saturating<i128>
1.74.0 (const: unstable) · Source§impl Add for Saturating<isize>
impl Add for Saturating<isize>
type Output = Saturating<isize>
1.74.0 (const: unstable) · Source§impl Add for Saturating<u128>
impl Add for Saturating<u128>
type Output = Saturating<u128>
1.74.0 (const: unstable) · Source§impl Add for Saturating<usize>
impl Add for Saturating<usize>
type Output = Saturating<usize>
1.0.0 · Source§impl Add<&str> for String
Available on non-no_global_oom_handling only.Implements the + operator for concatenating two strings.
impl Add<&str> for String
no_global_oom_handling only.Implements the + operator for concatenating two strings.
This consumes the String on the left-hand side and re-uses its buffer (growing it if
necessary). This is done to avoid allocating a new String and copying the entire contents on
every operation, which would lead to O(n^2) running time when building an n-byte string by
repeated concatenation.
The string on the right-hand side is only borrowed; its contents are copied into the returned
String.
§Examples
Concatenating two Strings takes the first by value and borrows the second:
let a = String::from("hello");
let b = String::from(" world");
let c = a + &b;
// `a` is moved and can no longer be used here.If you want to keep using the first String, you can clone it and append to the clone instead:
let a = String::from("hello");
let b = String::from(" world");
let c = a.clone() + &b;
// `a` is still valid here.Concatenating &str slices can be done by converting the first to a String:
let a = "hello";
let b = " world";
let c = a.to_string() + b;1.74.0 (const: unstable) · Source§impl Add<&Saturating<i8>> for &Saturating<i8>
impl Add<&Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<i8>> for Saturating<i8>
impl Add<&Saturating<i8>> for Saturating<i8>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<i16>> for &Saturating<i16>
impl Add<&Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<i16>> for Saturating<i16>
impl Add<&Saturating<i16>> for Saturating<i16>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<i32>> for &Saturating<i32>
impl Add<&Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<i32>> for Saturating<i32>
impl Add<&Saturating<i32>> for Saturating<i32>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<i64>> for &Saturating<i64>
impl Add<&Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<i64>> for Saturating<i64>
impl Add<&Saturating<i64>> for Saturating<i64>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<i128>> for &Saturating<i128>
impl Add<&Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<i128>> for Saturating<i128>
impl Add<&Saturating<i128>> for Saturating<i128>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<isize>> for &Saturating<isize>
impl Add<&Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<isize>> for Saturating<isize>
impl Add<&Saturating<isize>> for Saturating<isize>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u8>> for &Saturating<u8>
impl Add<&Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u8>> for Saturating<u8>
impl Add<&Saturating<u8>> for Saturating<u8>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u16>> for &Saturating<u16>
impl Add<&Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u16>> for Saturating<u16>
impl Add<&Saturating<u16>> for Saturating<u16>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u32>> for &Saturating<u32>
impl Add<&Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u32>> for Saturating<u32>
impl Add<&Saturating<u32>> for Saturating<u32>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u64>> for &Saturating<u64>
impl Add<&Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u64>> for Saturating<u64>
impl Add<&Saturating<u64>> for Saturating<u64>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u128>> for &Saturating<u128>
impl Add<&Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<u128>> for Saturating<u128>
impl Add<&Saturating<u128>> for Saturating<u128>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<usize>> for &Saturating<usize>
impl Add<&Saturating<usize>> for &Saturating<usize>
1.74.0 (const: unstable) · Source§impl Add<&Saturating<usize>> for Saturating<usize>
impl Add<&Saturating<usize>> for Saturating<usize>
1.74.0 (const: unstable) · Source§impl Add<Saturating<i8>> for &Saturating<i8>
impl Add<Saturating<i8>> for &Saturating<i8>
1.74.0 (const: unstable) · Source§impl Add<Saturating<i16>> for &Saturating<i16>
impl Add<Saturating<i16>> for &Saturating<i16>
1.74.0 (const: unstable) · Source§impl Add<Saturating<i32>> for &Saturating<i32>
impl Add<Saturating<i32>> for &Saturating<i32>
1.74.0 (const: unstable) · Source§impl Add<Saturating<i64>> for &Saturating<i64>
impl Add<Saturating<i64>> for &Saturating<i64>
1.74.0 (const: unstable) · Source§impl Add<Saturating<i128>> for &Saturating<i128>
impl Add<Saturating<i128>> for &Saturating<i128>
1.74.0 (const: unstable) · Source§impl Add<Saturating<isize>> for &Saturating<isize>
impl Add<Saturating<isize>> for &Saturating<isize>
1.74.0 (const: unstable) · Source§impl Add<Saturating<u8>> for &Saturating<u8>
impl Add<Saturating<u8>> for &Saturating<u8>
1.74.0 (const: unstable) · Source§impl Add<Saturating<u16>> for &Saturating<u16>
impl Add<Saturating<u16>> for &Saturating<u16>
1.74.0 (const: unstable) · Source§impl Add<Saturating<u32>> for &Saturating<u32>
impl Add<Saturating<u32>> for &Saturating<u32>
1.74.0 (const: unstable) · Source§impl Add<Saturating<u64>> for &Saturating<u64>
impl Add<Saturating<u64>> for &Saturating<u64>
1.74.0 (const: unstable) · Source§impl Add<Saturating<u128>> for &Saturating<u128>
impl Add<Saturating<u128>> for &Saturating<u128>
1.74.0 (const: unstable) · Source§impl Add<Saturating<usize>> for &Saturating<usize>
impl Add<Saturating<usize>> for &Saturating<usize>
1.8.0 · Source§impl Add<Duration> for SystemTime
impl Add<Duration> for SystemTime
type Output = SystemTime
§impl Add<Duration> for Date
Adds an unsigned duration of time to a date.
impl Add<Duration> for Date
Adds an unsigned duration of time to a date.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Date::checked_add].
§impl Add<Duration> for DateTime
Adds an unsigned duration of time to a datetime.
impl Add<Duration> for DateTime
Adds an unsigned duration of time to a datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [DateTime::checked_add].
§impl Add<Duration> for Offset
Adds an unsigned duration of time to an offset. This panics on overflow.
impl Add<Duration> for Offset
Adds an unsigned duration of time to an offset. This panics on overflow.
For checked arithmetic, see [Offset::checked_add].
§impl Add<Duration> for Time
Adds an unsigned duration of time. This uses wrapping arithmetic.
impl Add<Duration> for Time
Adds an unsigned duration of time. This uses wrapping arithmetic.
For checked arithmetic, see [Time::checked_add].
§impl Add<Duration> for Timestamp
Adds an unsigned duration of time to a timestamp.
impl Add<Duration> for Timestamp
Adds an unsigned duration of time to a timestamp.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Timestamp::checked_add].
§impl Add<Duration> for Zoned
Adds an unsigned duration of time to a zoned datetime.
impl Add<Duration> for Zoned
Adds an unsigned duration of time to a zoned datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Zoned::checked_add].
Using this implementation will result in consuming the Zoned value. Since
it is not Copy, this will prevent further use. If this is undesirable,
consider using the trait implementation for &Zoned, Zoned::checked_add
or cloning the Zoned value.
§impl Add<Duration> for SystemTime
Available on crate feature std only.
impl Add<Duration> for SystemTime
std only.type Output = SystemTime
§impl Add<SignedDuration> for Date
Adds a signed duration of time to a date.
impl Add<SignedDuration> for Date
Adds a signed duration of time to a date.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Date::checked_add].
§impl Add<SignedDuration> for DateTime
Adds a signed duration of time to a datetime.
impl Add<SignedDuration> for DateTime
Adds a signed duration of time to a datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [DateTime::checked_add].
§impl Add<SignedDuration> for Offset
Adds a signed duration of time to an offset. This panics on overflow.
impl Add<SignedDuration> for Offset
Adds a signed duration of time to an offset. This panics on overflow.
For checked arithmetic, see [Offset::checked_add].
§impl Add<SignedDuration> for Time
Adds a signed duration of time. This uses wrapping arithmetic.
impl Add<SignedDuration> for Time
Adds a signed duration of time. This uses wrapping arithmetic.
For checked arithmetic, see [Time::checked_add].
§impl Add<SignedDuration> for Timestamp
Adds a signed duration of time to a timestamp.
impl Add<SignedDuration> for Timestamp
Adds a signed duration of time to a timestamp.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Timestamp::checked_add].
§impl Add<SignedDuration> for Zoned
Adds a signed duration of time to a zoned datetime.
impl Add<SignedDuration> for Zoned
Adds a signed duration of time to a zoned datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Zoned::checked_add].
Using this implementation will result in consuming the Zoned value. Since
it is not Copy, this will prevent further use. If this is undesirable,
consider using the trait implementation for &Zoned, Zoned::checked_add
or cloning the Zoned value.
§impl Add<Span> for Date
Adds a span of time to a date.
impl Add<Span> for Date
Adds a span of time to a date.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Date::checked_add].
§impl Add<Span> for DateTime
Adds a span of time to a datetime.
impl Add<Span> for DateTime
Adds a span of time to a datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [DateTime::checked_add].
§impl Add<Span> for Offset
Adds a span of time to an offset. This panics on overflow.
impl Add<Span> for Offset
Adds a span of time to an offset. This panics on overflow.
For checked arithmetic, see [Offset::checked_add].
§impl Add<Span> for Time
Adds a span of time. This uses wrapping arithmetic.
impl Add<Span> for Time
Adds a span of time. This uses wrapping arithmetic.
For checked arithmetic, see [Time::checked_add].
§impl Add<Span> for Timestamp
Adds a span of time to a timestamp.
impl Add<Span> for Timestamp
Adds a span of time to a timestamp.
This uses checked arithmetic and panics when it fails. To handle arithmetic
without panics, use [Timestamp::checked_add]. Note that the failure
condition includes overflow and using a Span with non-zero units greater
than hours.
§impl<'a> Add<Duration> for &'a Zoned
Adds an unsigned duration of time to a borrowed zoned datetime.
impl<'a> Add<Duration> for &'a Zoned
Adds an unsigned duration of time to a borrowed zoned datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Zoned::checked_add].
§impl<'a> Add<SignedDuration> for &'a Zoned
Adds a signed duration of time to a borrowed zoned datetime.
impl<'a> Add<SignedDuration> for &'a Zoned
Adds a signed duration of time to a borrowed zoned datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Zoned::checked_add].
§impl<'a> Add<Span> for &'a Zoned
Adds a span of time to a borrowed zoned datetime.
impl<'a> Add<Span> for &'a Zoned
Adds a span of time to a borrowed zoned datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Zoned::checked_add].
§impl<'a> Add<Span> for Zoned
Adds a span of time to a zoned datetime.
impl<'a> Add<Span> for Zoned
Adds a span of time to a zoned datetime.
This uses checked arithmetic and panics on overflow. To handle overflow
without panics, use [Zoned::checked_add].
Using this implementation will result in consuming the Zoned value. Since
it is not Copy, this will prevent further use. If this is undesirable,
consider using the trait implementation for &Zoned, Zoned::checked_add
or cloning the Zoned value.
Source§impl<Ul, Ur> Add<UInt<Ur, B0>> for UInt<Ul, B0>
UInt<Ul, B0> + UInt<Ur, B0> = UInt<Ul + Ur, B0>
impl<Ul, Ur> Add<UInt<Ur, B0>> for UInt<Ul, B0>
UInt<Ul, B0> + UInt<Ur, B0> = UInt<Ul + Ur, B0>
Source§impl<Ul, Ur> Add<UInt<Ur, B0>> for UInt<Ul, B1>
UInt<Ul, B1> + UInt<Ur, B0> = UInt<Ul + Ur, B1>
impl<Ul, Ur> Add<UInt<Ur, B0>> for UInt<Ul, B1>
UInt<Ul, B1> + UInt<Ur, B0> = UInt<Ul + Ur, B1>
Source§impl<Ul, Ur> Add<UInt<Ur, B1>> for UInt<Ul, B0>
UInt<Ul, B0> + UInt<Ur, B1> = UInt<Ul + Ur, B1>
impl<Ul, Ur> Add<UInt<Ur, B1>> for UInt<Ul, B0>
UInt<Ul, B0> + UInt<Ur, B1> = UInt<Ul + Ur, B1>
Source§impl<Ul, Ur> Add<UInt<Ur, B1>> for UInt<Ul, B1>
UInt<Ul, B1> + UInt<Ur, B1> = UInt<(Ul + Ur) + B1, B0>
impl<Ul, Ur> Add<UInt<Ur, B1>> for UInt<Ul, B1>
UInt<Ul, B1> + UInt<Ur, B1> = UInt<(Ul + Ur) + B1, B0>