mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2026-02-07 01:28:33 +00:00
feat: initial parser exposing walker/writer
This commit is contained in:
39
pkg/message/parser/walker.go
Normal file
39
pkg/message/parser/walker.go
Normal file
@ -0,0 +1,39 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user