Created
October 28, 2013 03:27
-
-
Save mausch/7191042 to your computer and use it in GitHub Desktop.
First-class Solr fields and documents (rough draft)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class SolrDocument { | |
public readonly IReadOnlyCollection<SolrDocumentOrField> Fields; | |
public readonly double? Boost; | |
public SolrDocument(IReadOnlyCollection<SolrDocumentOrField> fields, double? boost) { | |
Fields = fields; | |
Boost = boost; | |
} | |
} | |
public class SolrField { | |
public readonly string Name; | |
public readonly string Value; | |
public readonly double? Boost; | |
public SolrField(string name, string value, double? boost) { | |
Name = name; | |
Value = value; | |
Boost = boost; | |
} | |
} | |
public abstract class SolrDocumentOrField { | |
private SolrDocumentOrField() {} | |
public abstract T Match<T>(Func<SolrDocument, T> document, Func<SolrField, T> field); | |
private class SolrDocumentOrField_Document: SolrDocumentOrField { | |
private readonly SolrDocument document; | |
public SolrDocumentOrField_Document(SolrDocument document) { | |
this.document = document; | |
} | |
public override T Match<T>(Func<SolrDocument, T> document, Func<SolrField, T> field) { | |
return document(this.document); | |
} | |
} | |
private class SolrDocumentOrField_Field: SolrDocumentOrField { | |
private readonly SolrField field; | |
public SolrDocumentOrField_Field(SolrField field) { | |
this.field = field; | |
} | |
public override T Match<T>(Func<SolrDocument, T> document, Func<SolrField, T> field) { | |
return field(this.field); | |
} | |
} | |
public static SolrDocumentOrField Document(SolrDocument document) { | |
return new SolrDocumentOrField_Document(document); | |
} | |
public static SolrDocumentOrField Field(SolrField field) { | |
return new SolrDocumentOrField_Field(field); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment