mesg-foundation/core

View on GitHub
x/ownership/handler.go

Summary

Maintainability
A
1 hr
Test Coverage
package ownership

import (
    "fmt"

    sdk "github.com/cosmos/cosmos-sdk/types"
    sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
    "github.com/mesg-foundation/engine/x/ownership/internal/types"
)

// NewHandler creates an sdk.Handler for all the instance type messages
func NewHandler(k Keeper) sdk.Handler {
    return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
        ctx = ctx.WithEventManager(sdk.NewEventManager())
        switch msg := msg.(type) {
        case MsgWithdraw:
            return handleMsgWithdraw(ctx, k, msg)
        default:
            errMsg := fmt.Sprintf("unrecognized %s message type: %T", types.ModuleName, msg)
            return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg)
        }
    }
}

// handleMsgWithdraw withdraws coins from resource to the owner.
func handleMsgWithdraw(ctx sdk.Context, k Keeper, msg MsgWithdraw) (*sdk.Result, error) {
    if err := k.Withdraw(ctx, msg); err != nil {
        return nil, err
    }

    ctx.EventManager().EmitEvent(
        sdk.NewEvent(
            sdk.EventTypeMessage,
            sdk.NewAttribute(sdk.AttributeKeyModule, ModuleName),
            sdk.NewAttribute(sdk.AttributeKeySender, msg.Owner.String()),
        ),
    )

    return &sdk.Result{
        Events: ctx.EventManager().Events(),
    }, nil
}