package syn_notice import ( "context" "encoding/json" ) var _ SynApiInterface = (*CmbToBBRequest)(nil) var _ SynApiInterface = (*BBToWechatRequest)(nil) var _ SynApiInterface = (*WechatToBBRequest)(nil) type SynApiInterface interface { GetSynNotice() *SynNotice } type SynNotice struct { OutBizBo string Type SynNoticeType BizContent SynApiInterface } func (this *SynNotice) Marshal() ([]byte, error) { return json.Marshal(this) } // 上下文键类型,避免命名冲突 type contextKey string const ( contextCMBToBBKey contextKey = "cmb_to_bb" contextBBToWXKey contextKey = "bb_to_wx" ) // SynApi 无状态服务 type SynApi struct{} // NewSynApi 创建无状态的处理实例 func NewSynApi() *SynApi { return &SynApi{} } // WithCmbTOBB 将 request 存入上下文 func (w *SynApi) WithCmbTOBB(ctx context.Context) context.Context { return context.WithValue(ctx, contextCMBToBBKey, &CmbToBBRequest{}) } // GetCmbToBB 从上下文中获取 request func (w *SynApi) GetCmbToBB(ctx context.Context) (*CmbToBBRequest, bool) { req, ok := ctx.Value(contextCMBToBBKey).(*CmbToBBRequest) return req, ok } // WithBBToWX 将 request 存入上下文 func (w *SynApi) WithBBToWX(ctx context.Context) context.Context { return context.WithValue(ctx, contextBBToWXKey, &BBToWechatRequest{}) } // GetBBToWX 从上下文中获取 request func (w *SynApi) GetBBToWX(ctx context.Context) (*BBToWechatRequest, bool) { req, ok := ctx.Value(contextBBToWXKey).(*BBToWechatRequest) return req, ok }