Provides the types, builders, and other helpers to manipulate AWS Amazon Resource Name (ARN) strings.
The ARN is a key component of all AWS service APIs and yet nearly all client toolkits treat it simply as a string. While this may be a reasonable and expedient decision, it seems there might be a need to not only ensure correctness of ARNs with validators but also constructors that allow making these strings correclt in the first place.
This crate provides a number of levels of ARN manipulation, the first is the direct construction
of an ARN type using the core ARN
, Identifier
, and ResourceIdentifier
types.
use aws_arn::{ARN, ResourceIdentifier};
use aws_arn::known::{Partition, Service};
use std::str::FromStr;
let arn = ARN {
partition: Some(Partition::default().into()),
service: Service::S3.into(),
region: None,
account_id: None,
resource: ResourceIdentifier::from_str("mythings/thing-1").unwrap()
};
In the example above, as we are defining a minimal ARN we could use one of the defined constructor functions.
use aws_arn::{ARN, ResourceIdentifier};
use aws_arn::known::Service;
use std::str::FromStr;
let arn = ARN::aws(
Service::S3.into(),
ResourceIdentifier::from_str("mythings/thing-1").unwrap()
);
Alternatively, using FromStr,
you can parse an existing ARN string into an ARN value.
use aws_arn::ARN;
use std::str::FromStr;
let arn: ARN = "arn:aws:s3:::mythings/thing-1".parse().expect("didn't look like an ARN");
Another approach is to use a more readable builder which also allows you to ignore those fields in the ARN you don't always need and uses a more fluent style of ARN construction.
use aws_arn::builder::{ArnBuilder, ResourceBuilder};
use aws_arn::known::{Partition, Service};
use aws_arn::{ARN, Identifier};
use std::str::FromStr;
let arn: ARN = ArnBuilder::service_id(Service::S3.into())
.resource(ResourceBuilder::named(Identifier::from_str("mythings").unwrap())
.resource_name(Identifier::new_unchecked("my-layer"))
.build_resource_path())
.in_partition_id(Partition::Aws.into())
.into();
Finally, it is possible to use resource-type specific functions that allow an even more direct and
simple construction (module aws_arn::builder::{service}
- service builder functions, although
at this time there are few supported services.
use aws_arn::builder::s3;
use aws_arn::Identifier;
use std::str::FromStr;
let arn = s3::object(
Identifier::from_str("mythings").unwrap(),
Identifier::from_str("thing-1").unwrap(),
);
For more, see the AWS documentation for Amazon Resource Name (ARN) documentation.
This crate has attempted to be as lean as possible, with a really minimal set of dependencies, we have include the following capabilities as optional features.
builders
adds the builder module. This feature is enabled by default, it also requires theknown
feature.known
adds a module containing enums for partitions, regions, and services. This feature is enabled by default.serde_support
adds derivedSerialize
andDeserialize
implementations for theARN
andResource
types. This feature is enabled by default.
This crate has attempted to be as lean as possible, with a really minimal set of dependencies, we have include the following as features.
serde_support
derivesSerialize
andDeserialize
for theARN
andResource
types.ext_validation
adds extended, service specific, validation using an external configuration file.
Version 0.2.0
- Relaxed validation of identifiers and resource identifiers.
- Removed
Resource
type which added a lot of the validation confusion. - Using new
Identifier
andResourceIdentifier
types to construct correctARN
values without the need for any external validation methods. - Replaced
ResourceBuilder
with one forResourceIdentifier
values. - Removed
ext_validation
feature - Added
consts
feature - Placed
builder
module into newbuilders
feature. - Added a lot more tests including an
examples.txt
file that is just a long list to be parsed. - Fixed Github issue-2.
Version 0.1.1
- Documentation additions and fixes, in both README and Rustdoc.
- Renamed service builder functions, added a parent/child pattern for s3.
- Added Serde feature.
- Made external validation optional.
Version 0.1.0
- Initial commit.
- Provides basic ARN type with
Display
andFromStr
. - Provides scaffolding for service-specific validation.
- Provides initial set of service builder,
make_{format}
, functions for ARN construction.
- More tests!
- More service formats for validation.
- More service builder functions.