mirror of
https://github.com/go-task/task.git
synced 2025-12-16 19:57:43 +01:00
41 lines
692 B
Go
41 lines
692 B
Go
|
|
package taskfile
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bufio"
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
"os"
|
||
|
|
)
|
||
|
|
|
||
|
|
// A StdinNode is a node that reads a taskfile from the standard input stream.
|
||
|
|
type StdinNode struct {
|
||
|
|
*BaseNode
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewStdinNode() (*StdinNode, error) {
|
||
|
|
base := NewBaseNode()
|
||
|
|
return &StdinNode{
|
||
|
|
BaseNode: base,
|
||
|
|
}, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (node *StdinNode) Location() string {
|
||
|
|
return "__stdin__"
|
||
|
|
}
|
||
|
|
|
||
|
|
func (node *StdinNode) Remote() bool {
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
|
||
|
|
func (node *StdinNode) Read(ctx context.Context) ([]byte, error) {
|
||
|
|
var stdin []byte
|
||
|
|
scanner := bufio.NewScanner(os.Stdin)
|
||
|
|
for scanner.Scan() {
|
||
|
|
stdin = fmt.Appendln(stdin, scanner.Text())
|
||
|
|
}
|
||
|
|
if err := scanner.Err(); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return stdin, nil
|
||
|
|
}
|