Struct hugr_core::types::FunctionType
source · pub struct FunctionType {
pub input: TypeRow,
pub output: TypeRow,
pub extension_reqs: ExtensionSet,
}
Expand description
Describes the edges required to/from a node, and thus, also the type of a Graph. This includes both the concept of “signature” in the spec, and also the target (value) of a call (static).
Fields§
§input: TypeRow
Value inputs of the function.
output: TypeRow
Value outputs of the function.
extension_reqs: ExtensionSet
The extension requirements which are added by the operation
Implementations§
source§impl FunctionType
impl FunctionType
sourcepub fn with_extension_delta(self, rs: impl Into<ExtensionSet>) -> Self
pub fn with_extension_delta(self, rs: impl Into<ExtensionSet>) -> Self
Builder method, add extension_reqs to an FunctionType
source§impl FunctionType
impl FunctionType
sourcepub fn new(input: impl Into<TypeRow>, output: impl Into<TypeRow>) -> Self
pub fn new(input: impl Into<TypeRow>, output: impl Into<TypeRow>) -> Self
Create a new signature with specified inputs and outputs.
sourcepub fn new_endo(linear: impl Into<TypeRow>) -> Self
pub fn new_endo(linear: impl Into<TypeRow>) -> Self
Create a new signature with the same input and output types (signature of an endomorphic function).
sourcepub fn port_type(&self, port: impl Into<Port>) -> Option<&Type>
pub fn port_type(&self, port: impl Into<Port>) -> Option<&Type>
Returns the type of a value Port
. Returns None
if the port is out
of bounds.
sourcepub fn in_port_type(&self, port: impl Into<IncomingPort>) -> Option<&Type>
pub fn in_port_type(&self, port: impl Into<IncomingPort>) -> Option<&Type>
Returns the type of a value input Port
. Returns None
if the port is out
of bounds.
sourcepub fn out_port_type(&self, port: impl Into<OutgoingPort>) -> Option<&Type>
pub fn out_port_type(&self, port: impl Into<OutgoingPort>) -> Option<&Type>
Returns the type of a value output Port
. Returns None
if the port is out
of bounds.
sourcepub fn in_port_type_mut(
&mut self,
port: impl Into<IncomingPort>,
) -> Option<&mut Type>
pub fn in_port_type_mut( &mut self, port: impl Into<IncomingPort>, ) -> Option<&mut Type>
Returns a mutable reference to the type of a value input Port
. Returns None
if the port is out
of bounds.
sourcepub fn out_port_type_mut(
&mut self,
port: impl Into<OutgoingPort>,
) -> Option<&mut Type>
pub fn out_port_type_mut( &mut self, port: impl Into<OutgoingPort>, ) -> Option<&mut Type>
Returns the type of a value output Port
. Returns None
if the port is out
of bounds.
sourcepub fn port_type_mut(&mut self, port: impl Into<Port>) -> Option<&mut Type>
pub fn port_type_mut(&mut self, port: impl Into<Port>) -> Option<&mut Type>
Returns a mutable reference to the type of a value Port
.
Returns None
if the port is out of bounds.
sourcepub fn port_count(&self, dir: Direction) -> usize
pub fn port_count(&self, dir: Direction) -> usize
Returns the number of ports in the signature.
sourcepub fn input_count(&self) -> usize
pub fn input_count(&self) -> usize
Returns the number of input ports in the signature.
sourcepub fn output_count(&self) -> usize
pub fn output_count(&self) -> usize
Returns the number of output ports in the signature.
sourcepub fn types(&self, dir: Direction) -> &[Type]
pub fn types(&self, dir: Direction) -> &[Type]
Returns a slice of the types for the given direction.
sourcepub fn input_types(&self) -> &[Type]
pub fn input_types(&self) -> &[Type]
Returns a slice of the input types.
sourcepub fn output_types(&self) -> &[Type]
pub fn output_types(&self) -> &[Type]
Returns a slice of the output types.
source§impl FunctionType
impl FunctionType
sourcepub fn find_rowvar(&self) -> Option<(usize, TypeBound)>
pub fn find_rowvar(&self) -> Option<(usize, TypeBound)>
If this FunctionType contains any row variables, return one.
sourcepub fn ports(&self, dir: Direction) -> impl Iterator<Item = Port>
pub fn ports(&self, dir: Direction) -> impl Iterator<Item = Port>
Returns the Port
s in the signature for a given direction.
sourcepub fn input_ports(&self) -> impl Iterator<Item = IncomingPort>
pub fn input_ports(&self) -> impl Iterator<Item = IncomingPort>
Returns the incoming Port
s in the signature.
sourcepub fn output_ports(&self) -> impl Iterator<Item = OutgoingPort>
pub fn output_ports(&self) -> impl Iterator<Item = OutgoingPort>
Returns the outgoing Port
s in the signature.
Trait Implementations§
source§impl Clone for FunctionType
impl Clone for FunctionType
source§fn clone(&self) -> FunctionType
fn clone(&self) -> FunctionType
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for FunctionType
impl Debug for FunctionType
source§impl Default for FunctionType
impl Default for FunctionType
source§fn default() -> FunctionType
fn default() -> FunctionType
source§impl<'de> Deserialize<'de> for FunctionType
impl<'de> Deserialize<'de> for FunctionType
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl Display for FunctionType
impl Display for FunctionType
source§impl From<FunctionType> for PolyFuncType
impl From<FunctionType> for PolyFuncType
source§fn from(body: FunctionType) -> Self
fn from(body: FunctionType) -> Self
source§impl From<FunctionType> for SignatureFunc
impl From<FunctionType> for SignatureFunc
source§fn from(v: FunctionType) -> Self
fn from(v: FunctionType) -> Self
source§impl PartialEq for FunctionType
impl PartialEq for FunctionType
source§fn eq(&self, other: &FunctionType) -> bool
fn eq(&self, other: &FunctionType) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl Serialize for FunctionType
impl Serialize for FunctionType
source§impl TryFrom<PolyFuncType> for FunctionType
impl TryFrom<PolyFuncType> for FunctionType
impl Eq for FunctionType
impl StructuralPartialEq for FunctionType
Auto Trait Implementations§
impl Freeze for FunctionType
impl RefUnwindSafe for FunctionType
impl Send for FunctionType
impl Sync for FunctionType
impl Unpin for FunctionType
impl UnwindSafe for FunctionType
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>
fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>
source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.