Giter Site home page Giter Site logo

aip-go's Introduction

Go Reference

AIP Go

Go SDK for implementing Google API Improvement Proposals (AIP).

Documentation

See https://aip.dev for the full AIP documentation.

Installing

$ go get -u go.einride.tech/aip

Examples

AIP-132 (Standard method: List)

  • Use pagination.PageToken to implement offset-based pagination.

    package examplelibrary
    
    import (
        "context"
    
        "go.einride.tech/aip/pagination"
        "google.golang.org/genproto/googleapis/example/library/v1"
        "google.golang.org/grpc/codes"
        "google.golang.org/grpc/status"
    )
    
    func (s *Server) ListShelves(
        ctx context.Context,
        request *library.ListShelvesRequest,
    ) (*library.ListShelvesResponse, error) {
        // Handle request constraints.
        const (
    §           maxPageSize     = 1000
            defaultPageSize = 100
        )
        switch {
        case request.PageSize < 0:
            return nil, status.Errorf(codes.InvalidArgument, "page size is negative")
        case request.PageSize == 0:
            request.PageSize = defaultPageSize
        case request.PageSize > maxPageSize:
            request.PageSize = maxPageSize
        }
        // Use pagination.PageToken for offset-based page tokens.
        pageToken, err := pagination.ParsePageToken(request)
        if err != nil {
            return nil, status.Errorf(codes.InvalidArgument, "invalid page token")
        }
        // Query the storage.
        result, err := s.Storage.ListShelves(ctx, &ListShelvesQuery{
            Offset:   pageToken.Offset,
            PageSize: request.GetPageSize(),
        })
        if err != nil {
            return nil, err
        }
        // Build the response.
        response := &library.ListShelvesResponse{
            Shelves: result.Shelves,
        }
        // Set the next page token.
        if result.HasNextPage {
            response.NextPageToken = pageToken.Next(request).String()
        }
        // Respond.
        return response, nil
    }

aip-go's People

Contributors

dependabot[bot] avatar odsod avatar ericwenn avatar davyj0nes avatar radhus avatar edholm avatar alethenorio avatar blaberg avatar oscarmuhr avatar fredrikaverpil avatar king-jam avatar stenehall avatar jonathaningram avatar saimanwong avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.