Description
GCP Client for Haskell.
Description
GCP Storage bucket client for Haskell.
README.md
google-cloud-storage
Haskell idiomatic client for Google Cloud Platform Storage service.
Full docs are available at https://github.com/tusharad/google-cloud-haskell
Installation
- Cabal: add to your
.cabalbuild-depends: google-cloud-storage == 1.1.0.0
- Stack: add to your
package.yamldependencies: - google-cloud-storage == 1.1.0.0
This package depends on google-cloud-common for authentication and HTTP helpers.
Authentication
Authentication is handled by google-cloud-common and follows this order:
- Use
GOOGLE_APPLICATION_CREDENTIALSto load a Service Account JSON and exchange a signed JWT for an access token. - Otherwise, use the Compute metadata server (suitable for GCE/GKE).
Examples
Minimal examples using Google.Cloud.Storage.Bucket:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.ByteString.Lazy.Char8 as BSL
import Google.Cloud.Storage.Bucket
-- List buckets in a project
listBucketsExample :: IO ()
listBucketsExample = do
let projectId = "my-gcp-project"
eRes <- listBuckets projectId
case eRes of
Left err -> putStrLn ("Error: " <> err)
Right buckets -> print buckets
-- Create a bucket
createBucketExample :: IO ()
createBucketExample = do
let newBucket = CreateBucketData
{ name = "my-unique-bucket-name"
, location = Location "us-central1"
, storageClass = STANDARD
, projectId = "my-gcp-project"
}
eRes <- createBucket newBucket
case eRes of
Left err -> putStrLn ("Create error: " <> err)
Right _ -> putStrLn "Bucket created"
-- Upload and download objects
objectOpsExample :: IO ()
objectOpsExample = do
let bucket = "my-bucket"
object = "my-object.txt"
_ <- uploadObject bucket object (BSL.pack "Hello, world!")
eBody <- downloadObject bucket object
case eBody of
Left err -> putStrLn ("Download error: " <> err)
Right body -> BSL.putStrLn body
-- Copy and delete an object
copyDeleteExample :: IO ()
copyDeleteExample = do
let req = CopyObjectRequest
{ sourceBucketName = "my-bucket"
, sourceObjectName = "my-object.txt"
, destinationBucketName = "another-bucket"
, destinationObject = "copied-object.txt"
}
_ <- copyObject req
_ <- deleteObject "my-bucket" "my-object.txt"
pure ()
License
MIT © Contributors.