arcgis 0.1.1

Type-safe Rust SDK for the ArcGIS REST API with compile-time guarantees
Documentation
//! # arcgis
//!
//! A type-safe Rust SDK for the [ArcGIS REST API](https://developers.arcgis.com/rest/).
//!
//! This library provides strongly-typed interfaces to ArcGIS services with compile-time
//! guarantees. Instead of error-prone string constants, it uses Rust enums and newtypes
//! to make invalid states unrepresentable.
//!
//! ## Features
//!
//! - 🔒 **Type-safe**: Enums instead of strings - compile-time validation
//! - 🌍 **GeoRust integration**: Native `geo-types` support
//! - 🔐 **Authentication**: API Key and OAuth 2.0
//! - ⚡ **Async/await**: Built on `tokio` and `reqwest`
//! - 🎯 **Modular**: Optional services via Cargo features
//!
//! ## Quick Start
//!
//! ```no_run
//! use arcgis::{ApiKeyAuth, ArcGISClient};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), arcgis::Error> {
//!     let auth = ApiKeyAuth::new("YOUR_API_KEY");
//!     let client = ArcGISClient::new(auth);
//!
//!     // Use the client to access ArcGIS services
//!     Ok(())
//! }
//! ```
//!
//! ## Type Safety
//!
//! This SDK enforces type safety throughout:
//!
//! ```rust
//! use arcgis::{GeometryType, SpatialRel};
//!
//! // ✅ Compile-time validated
//! let geom_type = GeometryType::Point;
//! let spatial_rel = SpatialRel::Intersects;
//!
//! // ❌ Won't compile
//! // let geom_type = "esriGeometryPoint";  // Wrong type!
//! ```

#![warn(missing_docs)]
#![warn(clippy::all)]
#![deny(unsafe_code)]

// Re-export major dependencies for user convenience
pub use geo_types;
pub use geojson;

// Core modules
mod auth;
mod client;
mod config;
mod error;
mod geometry;
mod services;
mod types;
mod util;

// Re-exports
pub use auth::{ApiKeyAuth, ApiKeyTier, AuthProvider, ClientCredentialsAuth, NoAuth};
pub use client::ArcGISClient;
pub use config::EnvConfig;
pub use error::{
    BuilderError, EnvError, Error, ErrorKind, HttpError, IoError, JsonError, UrlEncodedError,
    UrlError,
};
pub use geometry::{
    ArcGISEnvelope, ArcGISGeometry, ArcGISGeometryError, ArcGISGeometryErrorKind, ArcGISMultipoint,
    ArcGISPoint, ArcGISPolygon, ArcGISPolyline, GeoError, GeometryJsonError, GeometryType,
    SpatialReference, SpatialRel,
};
pub use services::{
    AddAttachmentResult, AddItemParams, AddItemResult, AddToDefinitionParams,
    AddToDefinitionResult, AddedLayerInfo, AddressCandidate, AlterResponse, AlterVersionParams,
    AreaUnit, AreasAndLengthsParameters, AreasAndLengthsParametersBuilder, AreasAndLengthsResult,
    AttachmentInfo, AttachmentInfosResponse, AttachmentSource, BarrierType, BatchCandidateResult,
    BatchCandidatesResponse, BatchGeocodeResponse, BatchLocation, BufferParameters,
    BufferParametersBuilder, BufferResult, CalculationType, CategoriesResult, Category,
    CategoryInfo, ClassBreakInfo, ClosestFacilityParameters, ClosestFacilityParametersBuilder,
    ClosestFacilityResult, CodedValue, CodedValueCode, CodedValueDomain, CodedValueDomainBuilder,
    ConflictDetection, ConflictEntry, ConflictFeature, ConflictsResponse, CreateGroupParams,
    CreateServiceParams, CreateServiceResult, CreateVersionParams, CreateVersionResponse,
    CurbApproach, DayHours, DeleteAttachmentResult, DeleteAttachmentsResponse,
    DeleteForwardEditsResponse, DeleteItemResult, DeleteResponse, DeleteServiceResult,
    DemResolution, DifferenceFeature, DifferenceResultType, DifferencesResponse, DirectionsLength,
    DirectionsStyle, DirectionsTimeAttribute, DistanceParameters, DistanceParametersBuilder,
    DistanceResult, Domain, DomainCodedValue, DownloadResult, DownloadTarget, DrawingTool,
    EditError, EditFieldsInfo, EditFieldsInfoBuilder, EditOptions, EditResult, EditResultItem,
    EditSessionError, EditorTrackingInfo, ElevationClient, ElevationPoint, ExportExtent,
    ExportImageParameters, ExportImageParametersBuilder, ExportImageResult, ExportMapBuilder,
    ExportMapParams, ExportMapParamsBuilder, ExportMapResponse, ExportResult, ExportTarget, Extent,
    Feature, FeatureQueryParams, FeatureQueryParamsBuilder, FeatureServiceClient, FeatureSet,
    FeatureStatisticsResponse, FeatureTemplate, FeatureTemplateBuilder, FieldCalculation,
    FieldDefinition, FieldDefinitionBuilder, FieldType, FindParams, FindParamsBuilder,
    FindResponse, FindResult, FontStack, GPBoolean, GPDataFile, GPDate, GPDouble, GPExecuteResult,
    GPFeatureRecordSetLayer, GPJobInfo, GPJobStatus, GPLinearUnit, GPLong, GPMessage,
    GPMessageType, GPParameter, GPRasterDataLayer, GPResultParameter, GPString, GenerateKmlParams,
    GenerateKmlParamsBuilder, GenerateRendererParams, GenerateRendererParamsBuilder,
    GeocodeAddress, GeocodeResponse, GeocodeServiceClient, GeometryServiceClient,
    GeometryTypeDefinition, GeoprocessingServiceClient, GlyphRange, GroupInfo, GroupMembership,
    GroupMembershipType, GroupResult, GroupSearchParameters, GroupSearchResult,
    HistogramParameters, HistogramParametersBuilder, HistogramResult, IdentifyParameters,
    IdentifyParametersBuilder, IdentifyParams, IdentifyParamsBuilder, IdentifyResponse,
    IdentifyResult, ImageFormat, ImageIdentifyResult, ImageServiceClient, ImpedanceAttribute,
    Index, IndexBuilder, InspectConflictFeature, InspectConflictLayer, InspectConflictsResponse,
    InterpolationType, ItemInfo, LayerConflicts, LayerDefinition, LayerDefinitionBuilder,
    LayerDefinitions, LayerDomainInfo, LayerFeatureDifferences, LayerLegend,
    LayerObjectIdDifferences, LayerOperation, LayerRelationship, LayerRelationshipBuilder,
    LayerSelection, LegendResponse, LegendSymbol, LevelOfDetail, LinearUnit, LocationType,
    MapServiceClient, MapServiceMetadata, MergePolicy, MosaicRule, NALocation,
    ODCostMatrixParameters, ODCostMatrixParametersBuilder, ODCostMatrixResult, OutputLine,
    OverwriteParameters, OverwriteResult, PartialPostRow, PixelType, PlaceAddress, PlaceCategory,
    PlaceContactInfo, PlaceDetailsResult, PlaceHours, PlaceInfo, PlaceRating,
    PlaceSearchParameters, PlaceSearchParametersBuilder, PlaceSearchResult, PlacesClient,
    PortalClient, PostResponse, ProfileParameters, ProfileParametersBuilder, ProfileResult,
    ProjectParameters, ProjectParametersBuilder, ProjectResult, PublishParameters, PublishResult,
    PublishStatus, QueryBuilder, QueryDomainsResponse, RangeDomain, RangeDomainBuilder, RasterInfo,
    ReconcileResponse, RelatedRecordGroup, RelatedRecordsParams, RelatedRecordsParamsBuilder,
    RelatedRecordsResponse, RelationshipCardinality, RelationshipClass, RelationshipRole,
    RelationshipRule, RelationshipsResponse, RendererResponse, RenderingRule, ResponseFormat,
    RestoreRowsLayer, RestoreRowsResponse, RestrictionAttribute, ReverseGeocodeResponse,
    RouteParameters, RouteParametersBuilder, RouteResult, RouteShape, RoutingServiceClient,
    SampleParameters, SampleParametersBuilder, SampleResult, SearchParameters, SearchResult,
    ServiceAreaParameters, ServiceAreaParametersBuilder, ServiceAreaResult, ServiceDefinition,
    ServiceDefinitionBuilder, ServiceDefinitionValidationError, ServiceLayer, SessionId,
    ShareItemResult, SharingParameters, SimplifyParameters, SimplifyParametersBuilder,
    SimplifyResult, SortOrder, SpatialReferenceDefinition, SplitPolicy, StartEditingResponse,
    StartReadingResponse, StatisticDefinition, StatisticType, StopEditingResponse,
    StopReadingResponse, Subtype, SuggestResponse, Suggestion, SummarizeElevationParameters,
    SummarizeElevationParametersBuilder, SummarizeElevationResult, TableDefinition,
    TableDefinitionBuilder, TemplatePrototype, TemplatePrototypeBuilder, TileCoordinate, TileInfo,
    TimeRelation, TopFeaturesParams, TopFeaturesParamsBuilder, TopFilter, Transformation,
    TravelDirection, TravelMode, TruncateResult, UTurnPolicy, UnionParameters,
    UnionParametersBuilder, UnionResult, UniqueValueInfo, UnshareItemResult,
    UpdateAttachmentResult, UpdateGroupParams, UpdateItemParams, UpdateItemResult,
    UpdateServiceDefinitionParams, UpdateServiceDefinitionResult, UserInfo,
    VectorTileServiceClient, VectorTileStyle, VersionGuid, VersionInfo, VersionInfosResponse,
    VersionManagementClient, VersionPermission, VersioningType, ViewshedParameters,
    ViewshedParametersBuilder, ViewshedResult,
};
pub use types::{AttachmentId, LayerId, ObjectId};
pub use util::check_esri_error;

/// Result type alias using this crate's [`Error`] type.
pub type Result<T> = std::result::Result<T, Error>;