aws_arn/builder/
lambda.rs

1/*!
2Provides a set of simple helper functions to make ResourceNames for the Lambda service.
3
4These resource definitions ae take from the AWS
5[documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awslambda.html#awslambda-resources-for-iam-policies).
6*/
7
8use crate::builder::ArnBuilder;
9use crate::known::Service::Lambda;
10use crate::{AccountIdentifier, Identifier, IdentifierLike, ResourceIdentifier, ResourceName};
11
12// ------------------------------------------------------------------------------------------------
13// Public Functions
14// ------------------------------------------------------------------------------------------------
15
16///
17/// `arn:${Partition}:lambda:${Region}:${Account}:function:${FunctionName}`
18///
19pub fn function(
20    partition: Identifier,
21    region: Identifier,
22    account: AccountIdentifier,
23    function_name: Identifier,
24) -> ResourceName {
25    ArnBuilder::service_id(Lambda.into())
26        .in_partition_id(partition)
27        .in_region_id(region)
28        .owned_by(account)
29        .is(ResourceIdentifier::from_qualified_id(&[
30            Identifier::new_unchecked("function"),
31            function_name,
32        ]))
33        .into()
34}
35
36///
37/// `arn:${Partition}:lambda:${Region}:${Account}:layer:${LayerName}`
38///
39pub fn layer(
40    partition: Identifier,
41    region: Identifier,
42    account: AccountIdentifier,
43    layer_name: Identifier,
44) -> ResourceName {
45    ArnBuilder::service_id(Lambda.into())
46        .in_partition_id(partition)
47        .in_region_id(region)
48        .owned_by(account)
49        .is(ResourceIdentifier::from_qualified_id(&[
50            Identifier::new_unchecked("layer"),
51            layer_name,
52        ]))
53        .into()
54}
55
56///
57/// `arn:${Partition}:lambda:${Region}:${Account}:layer:${LayerName}:${LayerVersion}`
58///
59pub fn layer_version(
60    partition: Identifier,
61    region: Identifier,
62    account: AccountIdentifier,
63    layer_name: Identifier,
64    layer_version: i32,
65) -> ResourceName {
66    ArnBuilder::service_id(Lambda.into())
67        .in_partition_id(partition)
68        .in_region_id(region)
69        .owned_by(account)
70        .is(ResourceIdentifier::from_qualified_id(&[
71            Identifier::new_unchecked("layer"),
72            layer_name,
73            Identifier::new_unchecked(&layer_version.to_string()),
74        ]))
75        .into()
76}
77
78///
79/// `arn:${Partition}:lambda:${Region}:${Account}:event-source-mapping:${UUID}`
80///
81pub fn event_source_mapping(
82    partition: Identifier,
83    region: Identifier,
84    account: AccountIdentifier,
85    mapping_uuid: Identifier,
86) -> ResourceName {
87    ArnBuilder::service_id(Lambda.into())
88        .in_partition_id(partition)
89        .in_region_id(region)
90        .owned_by(account)
91        .is(ResourceIdentifier::from_qualified_id(&[
92            Identifier::new_unchecked("event-source-mapping"),
93            mapping_uuid,
94        ]))
95        .into()
96}