Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions proto/wsscan/abstractserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,14 +135,14 @@ func (srv *AbstractServer) handleGetScannerElementsRequest(

// Build ElementData for each requested element, skipping duplicates.
var elements []ElementData
seen := generic.NewSet[RequestedElement]()
seen := generic.NewSet[ScannerRequestedElement]()

for _, re := range req.RequestedElements {
if !seen.TestAndAdd(re) {
continue
}
switch re {
case RequestedElementDefaultScanTicket:
case ScannerElemDefaultScanTicket:
req := srv.caps.DefaultRequest()
if req != nil {
ticket := fromAbstractScannerRequest(req)
Expand All @@ -153,23 +153,23 @@ func (srv *AbstractServer) handleGetScannerElementsRequest(
})
}

case RequestedElementDescription:
case ScannerElemDescription:
desc := fromAbstractScannerDescription(srv.caps)
elements = append(elements, ElementData{
Name: ElementDataScannerDescription,
Valid: BooleanElement("true"),
ScannerDescription: optional.New(desc),
})

case RequestedElementConfiguration:
case ScannerElemConfiguration:
conf := fromAbstractScannerConfiguration(srv.caps)
elements = append(elements, ElementData{
Name: ElementDataScannerConfiguration,
Valid: BooleanElement("true"),
ScannerConfiguration: optional.New(conf),
})

case RequestedElementStatus:
case ScannerElemStatus:
srv.lock.Lock()
status := srv.status
srv.lock.Unlock()
Expand Down
2 changes: 1 addition & 1 deletion proto/wsscan/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func NewClient(u *url.URL, tr *transport.Transport) *Client {
// from the WS-Scan server.
func (c *Client) GetScannerElements(
ctx context.Context,
elements ...RequestedElement,
elements ...ScannerRequestedElement,
) (*GetScannerElementsResponse, error) {

req := GetScannerElementsRequest{RequestedElements: elements}
Expand Down
4 changes: 2 additions & 2 deletions proto/wsscan/getjobelementsrequest.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
// by JobID. RequestedElements specifies which job schema elements to return.
type GetJobElementsRequest struct {
JobID int
RequestedElements []RequestedElement
RequestedElements []JobRequestedElement
}

// toXML generates XML tree for the [GetJobElementsRequest].
Expand Down Expand Up @@ -69,7 +69,7 @@ func decodeGetJobElementsRequest(root xmldoc.Element) (

for _, child := range requestedElements.Elem.Children {
if child.Name == NsWSCN+":Name" {
re, err := decodeRequestedElement(child)
re, err := decodeJobRequestedElement(child)
if err != nil {
return r, err
}
Expand Down
10 changes: 5 additions & 5 deletions proto/wsscan/getjobelementsrequest_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import (
func TestGetJobElementsRequest_RoundTrip(t *testing.T) {
orig := GetJobElementsRequest{
JobID: 5,
RequestedElements: []RequestedElement{
RequestedElementDescription,
RequestedElementStatus,
RequestedElements: []JobRequestedElement{
JobElemStatus,
JobElemScanTicket,
},
}
elm := orig.toXML(NsWSCN + ":GetJobElementsRequest")
Expand All @@ -49,7 +49,7 @@ func TestGetJobElementsRequest_MissingJobId(t *testing.T) {
{
Name: NsWSCN + ":RequestedElements",
Children: []xmldoc.Element{
{Name: NsWSCN + ":Name", Text: NsWSCN + ":ScannerDescription"},
{Name: NsWSCN + ":Name", Text: NsWSCN + ":JobStatus"},
},
},
},
Expand Down Expand Up @@ -95,7 +95,7 @@ func TestGetJobElementsRequest_EmptyRequestedElements(t *testing.T) {
func TestGetJobElementsRequest_ZeroJobId(t *testing.T) {
orig := GetJobElementsRequest{
JobID: 0,
RequestedElements: []RequestedElement{RequestedElementStatus},
RequestedElements: []JobRequestedElement{JobElemStatus},
}
elm := orig.toXML(NsWSCN + ":GetJobElementsRequest")
_, err := decodeGetJobElementsRequest(elm)
Expand Down
4 changes: 2 additions & 2 deletions proto/wsscan/getscannerelementsrequest.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
// GetScannerElementsRequest enables a client to request information
// about the scanner from the WSD Scan Service.
type GetScannerElementsRequest struct {
RequestedElements []RequestedElement // At least one required
RequestedElements []ScannerRequestedElement // At least one required
}

// Action returns the [Action] associated with this body.
Expand Down Expand Up @@ -65,7 +65,7 @@ func decodeGetScannerElementsRequest(root xmldoc.Element) (

for _, child := range requestedElements.Elem.Children {
if child.Name == NsWSCN+":Name" {
re, decErr := decodeRequestedElement(child)
re, decErr := decodeScannerRequestedElement(child)
if decErr != nil {
return gser, decErr
}
Expand Down
24 changes: 12 additions & 12 deletions proto/wsscan/getscannerelementsrequest_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ func TestGetScannerElementsRequestRoundTrip(t *testing.T) {
// valid case.
name: "single name",
gser: GetScannerElementsRequest{
RequestedElements: []RequestedElement{
RequestedElementDescription,
RequestedElements: []ScannerRequestedElement{
ScannerElemDescription,
},
},
},
Expand All @@ -39,10 +39,10 @@ func TestGetScannerElementsRequestRoundTrip(t *testing.T) {
// in order.
name: "multiple names",
gser: GetScannerElementsRequest{
RequestedElements: []RequestedElement{
RequestedElementDescription,
RequestedElementConfiguration,
RequestedElementStatus,
RequestedElements: []ScannerRequestedElement{
ScannerElemDescription,
ScannerElemConfiguration,
ScannerElemStatus,
},
},
},
Expand Down Expand Up @@ -139,9 +139,9 @@ func TestGetScannerElementsRequestDecodeError(t *testing.T) {
// children.
func TestGetScannerElementsRequestToXML(t *testing.T) {
gser := GetScannerElementsRequest{
RequestedElements: []RequestedElement{
RequestedElementDescription,
RequestedElementConfiguration,
RequestedElements: []ScannerRequestedElement{
ScannerElemDescription,
ScannerElemConfiguration,
},
}

Expand Down Expand Up @@ -171,9 +171,9 @@ func TestGetScannerElementsRequestToXML(t *testing.T) {
len(reqElem.Children))
}

expected := []RequestedElement{
RequestedElementDescription,
RequestedElementConfiguration,
expected := []ScannerRequestedElement{
ScannerElemDescription,
ScannerElemConfiguration,
}
for i, child := range reqElem.Children {
if child.Name != NsWSCN+":Name" {
Expand Down
127 changes: 96 additions & 31 deletions proto/wsscan/requestedelement.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,73 +10,138 @@ package wsscan

import "github.com/OpenPrinting/go-mfp/util/xmldoc"

// RequestedElement identifies a section of the WSD Scan Service schema
// ScannerRequestedElement identifies a section of the WSD Scan Service schema
// that a client wants data for in a GetScannerElementsRequest.
//
// For GetScannerElementsRequest, one of the following QName values:
// Valid QName values:
// - wscn:DefaultScanTicket
// - wscn:ScannerDescription
// - wscn:ScannerConfiguration
// - wscn:ScannerStatus
// - xmlns:VendorSection (vendor-defined extension)
type RequestedElement int
type ScannerRequestedElement int

// Known RequestedElement values.
// Known ScannerRequestedElement values.
const (
UnknownRequestedElement RequestedElement = iota
RequestedElementDefaultScanTicket // wscn:DefaultScanTicket
RequestedElementDescription // wscn:ScannerDescription
RequestedElementConfiguration // wscn:ScannerConfiguration
RequestedElementStatus // wscn:ScannerStatus
RequestedElementVendorSection // xmlns:VendorSection
UnknownScannerElem ScannerRequestedElement = iota
ScannerElemDefaultScanTicket // wscn:DefaultScanTicket
ScannerElemDescription // wscn:ScannerDescription
ScannerElemConfiguration // wscn:ScannerConfiguration
ScannerElemStatus // wscn:ScannerStatus
ScannerElemVendorSection // xmlns:VendorSection
)

// decodeRequestedElement decodes [RequestedElement] from the XML tree.
func decodeRequestedElement(root xmldoc.Element) (RequestedElement, error) {
return decodeEnum(root, DecodeRequestedElement)
// decodeScannerRequestedElement decodes [ScannerRequestedElement] from the XML tree.
func decodeScannerRequestedElement(root xmldoc.Element) (ScannerRequestedElement, error) {
return decodeEnum(root, DecodeScannerRequestedElement)
}

// toXML generates XML tree for the [RequestedElement].
func (re RequestedElement) toXML(name string) xmldoc.Element {
// toXML generates XML tree for the [ScannerRequestedElement].
func (re ScannerRequestedElement) toXML(name string) xmldoc.Element {
return xmldoc.Element{
Name: name,
Text: re.String(),
}
}

// String returns the string representation of the [RequestedElement].
func (re RequestedElement) String() string {
// String returns the string representation of the [ScannerRequestedElement].
func (re ScannerRequestedElement) String() string {
switch re {
case RequestedElementDefaultScanTicket:
case ScannerElemDefaultScanTicket:
return NsWSCN + ":DefaultScanTicket"
case RequestedElementDescription:
case ScannerElemDescription:
return NsWSCN + ":ScannerDescription"
case RequestedElementConfiguration:
case ScannerElemConfiguration:
return NsWSCN + ":ScannerConfiguration"
case RequestedElementStatus:
case ScannerElemStatus:
return NsWSCN + ":ScannerStatus"
case RequestedElementVendorSection:
case ScannerElemVendorSection:
return NsXML + ":VendorSection"
}

return "Unknown"
}

// DecodeRequestedElement decodes [RequestedElement] out of its XML string
// representation.
func DecodeRequestedElement(s string) RequestedElement {
// DecodeScannerRequestedElement decodes [ScannerRequestedElement] out of its
// XML string representation.
func DecodeScannerRequestedElement(s string) ScannerRequestedElement {
switch s {
case NsWSCN + ":DefaultScanTicket":
return RequestedElementDefaultScanTicket
return ScannerElemDefaultScanTicket
case NsWSCN + ":ScannerDescription":
return RequestedElementDescription
return ScannerElemDescription
case NsWSCN + ":ScannerConfiguration":
return RequestedElementConfiguration
return ScannerElemConfiguration
case NsWSCN + ":ScannerStatus":
return RequestedElementStatus
return ScannerElemStatus
case NsXML + ":VendorSection":
return RequestedElementVendorSection
return ScannerElemVendorSection
}

return UnknownRequestedElement
return UnknownScannerElem
}

// JobRequestedElement identifies a section of the WSD Scan Service schema
// that a client wants data for in a GetJobElementsRequest.
//
// Valid QName values:
// - wscn:JobStatus
// - wscn:ScanTicket
// - wscn:Documents
// - xmlns:VendorSection (vendor-defined extension)
type JobRequestedElement int

// Known JobRequestedElement values.
const (
UnknownJobElem JobRequestedElement = iota
JobElemStatus // wscn:JobStatus
JobElemScanTicket // wscn:ScanTicket
JobElemDocuments // wscn:Documents
JobElemVendorSection // xmlns:VendorSection
)

// decodeJobRequestedElement decodes [JobRequestedElement] from the XML tree.
func decodeJobRequestedElement(root xmldoc.Element) (JobRequestedElement, error) {
return decodeEnum(root, DecodeJobRequestedElement)
}

// toXML generates XML tree for the [JobRequestedElement].
func (re JobRequestedElement) toXML(name string) xmldoc.Element {
return xmldoc.Element{
Name: name,
Text: re.String(),
}
}

// String returns the string representation of the [JobRequestedElement].
func (re JobRequestedElement) String() string {
switch re {
case JobElemStatus:
return NsWSCN + ":JobStatus"
case JobElemScanTicket:
return NsWSCN + ":ScanTicket"
case JobElemDocuments:
return NsWSCN + ":Documents"
case JobElemVendorSection:
return NsXML + ":VendorSection"
}

return "Unknown"
}

// DecodeJobRequestedElement decodes [JobRequestedElement] out of its XML
// string representation.
func DecodeJobRequestedElement(s string) JobRequestedElement {
switch s {
case NsWSCN + ":JobStatus":
return JobElemStatus
case NsWSCN + ":ScanTicket":
return JobElemScanTicket
case NsWSCN + ":Documents":
return JobElemDocuments
case NsXML + ":VendorSection":
return JobElemVendorSection
}

return UnknownJobElem
}
Loading