mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-11 05:06:51 +00:00
40 lines
929 B
Go
40 lines
929 B
Go
package parser
|
|
|
|
type Walker struct {
|
|
root *Part
|
|
|
|
defaultHandler PartHandler
|
|
typeHandlers map[string]PartHandler
|
|
dispHandlers map[string]DispHandler
|
|
}
|
|
|
|
type PartHandler func(*Part) error
|
|
type DispHandler func(*Part, PartHandler) error
|
|
|
|
func newWalker(root *Part) *Walker {
|
|
return &Walker{
|
|
root: root,
|
|
defaultHandler: func(*Part) (err error) { return },
|
|
typeHandlers: make(map[string]PartHandler),
|
|
dispHandlers: make(map[string]DispHandler),
|
|
}
|
|
}
|
|
|
|
func (w *Walker) Walk() (err error) {
|
|
return w.root.visit(w)
|
|
}
|
|
|
|
func (w *Walker) WithDefaultHandler(handler PartHandler) *Walker {
|
|
w.defaultHandler = handler
|
|
return w
|
|
}
|
|
func (w *Walker) WithContentTypeHandler(contType string, handler PartHandler) *Walker {
|
|
w.typeHandlers[contType] = handler
|
|
return w
|
|
}
|
|
|
|
func (w *Walker) WithContentDispositionHandler(contDisp string, handler DispHandler) *Walker {
|
|
w.dispHandlers[contDisp] = handler
|
|
return w
|
|
}
|