arcgis 0.1.3

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;

// Example tracking (for testing/verification)
pub mod example_tracker;

// 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, CaliforniaZone5, CaliforniaZone5Meters, GeoError,
    GeometryJsonError, GeometryType, OregonNorth, OregonNorthMeters, ProjectedPoint,
    SpatialReference, SpatialRel, StatePlanePoint, WashingtonNorth, WashingtonNorthMeters,
    WebMercatorPoint, Wgs84Point,
};
pub use services::{
    AddAttachmentResult, AddItemParams, AddItemResult, AddToDefinitionParams,
    AddToDefinitionResult, AddedLayerInfo, AddressCandidate, AlterResponse, AlterVersionParams,
    AreaUnit, AreasAndLengthsParameters, AreasAndLengthsParametersBuilder, AreasAndLengthsResult,
    AttachmentInfo, AttachmentInfosResponse, AttachmentSource, BarrierType, BatchGeocodeRecord,
    BatchGeocodeResponse, BatchLocation, BufferParameters, BufferParametersBuilder, BufferResult,
    CalculateResult, 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, GPProgress, 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, ItemDataUpload, 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, PublishServiceInfo, 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>;